Как использовать OCMockito для проверки поведения свойства, доступного только для чтения?

Я использую MVVM с ReactiveCocoa и OCMockito для тестирования. Предположим, у меня есть ViewController A и ViewController B. A должен выполнить переход к B. Я хочу убедиться, что, когда это происходит, A передает необходимые данные («модель») вместе с B через назначение в первую очередь.

B выглядит так:

@interface ViewControllerB : UITableViewController
@property(nonatomic, readonly) ViewModel *viewModel;
@end

Где-то в контроллере представления A есть оператор:

 viewControllerB.viewModel.model = newModel;   // passes new data along for B to display

Я хочу убедиться, что это назначение происходит, но свойство viewModel доступно только для чтения. ViewModel инициализируется методом инициализации viewController.

Как я мог издеваться над viewModel здесь?

Я мог бы частично имитировать viewControllerB, чтобы вернуть макет viewModel, который затем я проверяю, но https://github.com/jonreid/OCMockito/issues/38 говорит, что с тех пор частичные моки были удалены. Почему?!


person fatuhoku    schedule 19.03.2014    source источник


Ответы (1)


Я бы изменил init, чтобы принять ViewModel, и просто назначил его свойству только для чтения. После этого вы можете издеваться над моделью и проверять вызов сеттера.

Я не большой поклонник изменения API только для того, чтобы иметь возможность протестировать класс, но, вероятно, это изменение естественно для вашего дизайна.

Что я также замечаю - использование двойных точек. Для меня это вполне очевидный знак о необходимых изменениях в API

person Eugen Martynov    schedule 01.04.2014
comment
Да, хороший момент — я использую раскадровки в минуту, поэтому я позволяю iOS обрабатывать мои экземпляры контроллера представления. Это одна из причин, почему это так болезненно: я не могу определить отдельный init, для которого передаются данные, которые я хочу передать. - person fatuhoku; 02.04.2014