Я пытаюсь издеваться UIImagePickerController, чтобы проверить метод из ViewController (написано в Swift):OCMock насмешливый UIImagePickerController
var imagePicker: UIImagePickerController!
...
func choosePhoto() {
imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .PhotoLibrary
self.presentViewController(imagePicker, animated: true, completion: nil)
}
и тестовый класс (написанный в Objective-C):
Интерфейс:
@property (nonatomic, strong) ViewController *viewController;
Реализация:
- (void)setUp {
[super setUp];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *navigationController = [storyboard instantiateInitialViewController];
self.viewController = (ViewController *)[navigationController visibleViewController];
self.viewController.view;
}
....
- (void)testPicker {
id mockPicker = [OCMockObject mockForClass:[UIImagePickerController class]];
self.viewController.imagePicker = mockPicker;
[[mockPicker expect] setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
[[(id)self.viewController expect] presentViewController:mockPicker animated:YES completion:nil];
[self.viewController choosePhoto];
[mockPicker verify];
}
Тест терпит неудачу, потому что:
OCMockObject (UIImagePickerController): ожидается, метод не был вызван: setSourceType: 0
и
неудачно: поймали "NSInvalidArgumentException", " - [Ожидание MyApp.ViewController]: непризнанный селектор, отправленный в экземпляр 0x ....
Может ли кто-нибудь помочь мне с этим?
Большое спасибо.
Спасибо за ваш ответ. Макет для сборщика работает, но не с контроллером представления. Я сделал несколько экспериментов, и оказалось, что это ограничение языка Swift, потому что в Objective-C он проверяет, что какой-то другой метод был вызван в методе тестирования, но в Swift он не работает. – jonaszmclaren
Интересно - я еще не слишком много делал с OCMock и Swift, поэтому я даже не подумал об этом. – bplattenburg
@jonaszmclaren Существует намного лучший способ издеваться над объектами в Swift. не нужны сторонние библиотеки, такие как OCMock –