Тестирование iOS с использованием свойств Kiwi - PullRequest
2 голосов
/ 21 октября 2011

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

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

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 и тестируемой разработке в целом.Как создать фиктивный объект, используя kiwi, для абстрактного тестирования этой функциональности, поскольку я использую этот фреймворк во многих проектах.

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

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

Ответы [ 2 ]

1 голос
/ 22 ноября 2012

Свойства - это скрытые методы, поэтому:

Мне удалось сделать это с помощью комбинации +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:), чтобы отключить методы, которые нельзя вызвать в имитируемом приборе.

0 голосов
/ 17 декабря 2011

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

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

...