ПРИМЕЧАНИЕ: Это не мой фактический код, я набрал его простым способом, чтобы сюда обратиться за помощью.Mocking Objective-C code in Swift Unit-Tests
Я этот класс написан на Objective-C
@interface MySpecialManager <NSObject>
+ (MySpecialManager *)sharedInstance;
-(void)someFunctionWithParamOne:(NSString *)paramOne andParamTwo:(NSString *)paramTwo;
-(void)someFunctionWithParamOne:(NSString *)paramOne andParamTwo:(NSString *)paramTwo success:(void (^)(NSString *))success failure:(void (^)(NSError *error))failure;
@end
У меня есть юнит-тесты (в Swift) для второй функции с блоками успеха/неудачи, но сейчас я пытаюсь написать блок тесты для первой функции. Вся эта функция выполняет вызов второй функции. Поэтому я думал, что лучший способ проверить это будет просто проверить, что вторая функция действительно вызвана и с правильными параметрами. Поэтому я думал, что насмехаться/стучать - это путь вперед, но я изо всех сил пытаюсь понять, как именно это проверить.
С гораздо погуглить я прочитал, что создание моего собственного Mock объекта будет путем вперед, я это сейчас (написано в Swift):
class MockMySpecialManager: NSObject, MySpecialManagerProtocol {
var functionOneWasCalled = false
var functionTwoWasCalled = false
func someFunctionWithParamOne(paramOne: String!, andParamTwo paramTwo: String!) {
functionOneWasCalled = true
}
func someFunctionWithParamOne(paramOne: String!, andParamTwo paramTwo: String!, success: ((String!) -> Void)!, failure: ((NSError!) -> Void)!) {
functionTwoWasCalled = true
}
Если в моем тесте, хотя я Инициализирую MockMySpecialManager
и вызывать первый метод, он не будет вызывать второй, поскольку он просто обновляет логическое, правильно? Я мог обновить функцию mock, чтобы вызвать вторую, но это похоже на обман, а не на реальный модульный тест, поскольку он не тестирует мой код. Как я могу проверить это?
Мне как-то (или так я думаю) нужно настроить менеджера на MySpecialManager.sharedInstace()
, вызвать первый метод, а затем проверить, был ли мой второй метод вызван на макет.
Любая помощь? Что я не понимаю/где я ошибаюсь?
Ваш первый комментарий поразил меня привкусом здравого смысла! Я сейчас подклассифицирую и вижу, что это заставляет меня, но я по крайней мере дал вам голос. – Hodson
уверен, помните, что в вашем подклассе вы также можете назвать супер, чтобы вы могли реализовать первый и второй методы, чтобы добавить свою тестовую логику, это не придает большого значения этому тесту, поскольку вы знаете, что звоните 1, но это полезно в MOC вы собираетесь повторно использовать – Wain