Как я могу использовать 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 инициализируется методом init viewController.

Как я могу макет ViewModel здесь?

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

1 ответ

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

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

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

Другие вопросы по тегам