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

Я начинаю использовать OCMockito для модульного тестирования. Прямо сейчас я использую это, чтобы высмеять UserDefaults (через внедрение зависимости).

Я могу контролировать то, что возвращается: [given([mockUserDefaults objectForKey:@"some key"]) willReturn:@"a value I want"];

Теперь мой вопрос: как я могу проверить, какие значения пользователь установил для макета? UserDefaults?

например, если пользователь выдал: [self.userDefaults setObject:[NSDate date] forKey:"example"];

Как я могу получить date обратно из макета userDefaults?

1 ответ

Решение

У OCMockito нет способа (пока) захватывать и возвращать аргументы. Вместо этого каждый аргумент должен удовлетворять сопоставителю OCHamcrest. Если совпадение не указано, то equalTo предполагается.

тестирование [NSDate date] Обычно это не очень хорошая идея в модульных тестах, потому что вы не можете контролировать дату. Но для примера приведем подтверждение того, что аргументом является любая NSDate. (sut это "тестируемая система".)

[verify(sut.userDefaults) setObject:instanceOf([NSDate class]) forKey:@"example"];

Итак, здесь первое совпадение instanceOf соответствовать любому NSDate.

Второе совпадение неявно equalTo(@"example)

Обновить:

В OCMockito 1.1.0 есть способ захвата аргументов, используя MKTArgumentCaptor:

MKTArgumentCaptor *argument = [[MKTArgumentCaptor alloc] init];
[verify(sut.userDefaults) setObject:[argument capture] forKey:@"example"];

Вы можете получить захваченный аргумент с помощью [argument value]или массив всех захваченных аргументов с [argument allValues],

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