Как использовать 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]
,