iOS тестирует фиктивный подкласс со свойствами с использованием Kiwi

У меня есть приложение, для которого я использую Objective Resource для создания локальных объектов для отражения удаленных ответов.

Конкретные классы моделей имеют подкласс абстрактного класса, чтобы дать им все множество дополнительных функций, наиболее важно возможность сериализации, записи на диск и загрузки с диска, независимо от того, каковы конкретные свойства этого конкретного объекта модели. .

superclass.m

-(BOOL)saveToDisk{  
    ...serializes and encodes all properties to disk  
    ...return success
}


subclass.h : superclass

@property (nonatomic, retain) NSString* name;
@property (nonatomic, retain) NSArray* friends;
 ...etc

Тогда я позвоню

     instanceOfSubclass.name = "joe"  
     NSLog(@"save status = %d",[instanceOfSubclass saveToDisk]);

Я новичок в BDD и разработке через тестирование в целом. Как мне создать фиктивный объект с помощью киви, чтобы абстрактно протестировать эту функциональность, так как я использую этот фреймворк во многих проектах.

В частности, я хочу создать тесты, которые гарантируют, что подкласс с различными типами свойств может быть сохранен загруженным, удаленным и перезаписанным.

Насколько я понимаю, именно здесь появляются заглушки и макеты, но я не могу понять, как имитировать свойства. Должен ли я создавать реальный класс с этими свойствами?


person averydev    schedule 21.10.2011    source источник


Ответы (2)


Свойства — это методы за кулисами, поэтому:

Мне удалось сделать это с помощью комбинации метода +mock, упомянутого @aopsfan, затем с помощью -stub:andReturn: я угадал название методов, реализующих свойства. Этот пример работал, имитируя TCConnection (из Twilio iOS SDK):

// Instantiates a mocked object:
id fake_connection = [TCConnection mock];
// Creates a faked property accessor:
[fake_connection stub:@selector(parameters)
            andReturn:@{@"From": @"fake-caller"}];

// I could now call my TCDeviceDelegate 's
// -device:didReceiveIncomingConnection:
[myActualObject device:myActualObject.device
            didReceiveIncomingConnection:fake_connection];
// Check some results on the object:
[[myActualObject.connection should] equal:fake_connection];

Этот конкретный пример шаблона, вероятно, можно обобщить на другие ситуации. Полезно вызывать параметр -stub (без andReturn:), чтобы заглушить методы, которые нельзя вызвать в моделируемом приборе.

person Jacob Oscarson    schedule 22.11.2012

Для вас есть некоторая документация по здесь. По сути, Kiwi предоставляет категорию Objective-C на NSObject, к которой у вас есть доступ, когда вы #import "Kiwi.h". Это позволяет всем объектам, унаследованным от NSObject, реагировать на +mock, mockWithName: и т. д., что настраивается с помощью класса KWMock.

Надеюсь, это поможет, и извините, что немного поздно :)

person aopsfan    schedule 16.12.2011
comment
ссылка на документы не работает, попробуйте github: github.com/kiwi-bdd /Kiwi/wiki/Mocks-and-Stubs - person manroe; 18.08.2015