GHUnit, OCMock: как проверить, вызывается ли один из двух указанных блоков?

У меня есть метод, который принимает блок ответа и блок ошибки, я пишу модульный тест, предоставляя ему действительные данные и недопустимые данные, чтобы он вызывал блок ответа и блок ошибки соответственно, но с GHUnit и OCMock, как я могу проверить правильность блок называется?

Я подумал:

для действительных данных: response { GHAssertTrue(YES, @""); } error { GHAssertTrue(NO, @"Действительные данные не должны вызывать блок ошибок"); }

и наоборот для неверных данных.

Правильно ли я сделал?


person hzxu    schedule 31.10.2012    source источник


Ответы (2)


Проблема с размещением ваших утверждений в блоках заключается в том, что вы не узнаете, если ни один из блоков не будет вызван. Это то, что мы делаем:

__block BOOL done = NO;
[classUnderTest doSomethingWithResultBlock:^(BOOL success) {
    done = YES;
} errorBlock:^(BOOL success) {
    // should not be called
    expect(NO).to.beTruthy();
}];
while (!done) [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];

Недостатком является то, что если блок успеха никогда не вызывается, тесты будут зависать в цикле while. Вы можете избежать этого, добавив тайм-аут:

NSDate *startTime = [NSDate date];
__block BOOL done = NO;
[classUnderTest doSomethingWithResultBlock:^(BOOL success) {
    done = YES;
} errorBlock:^(BOOL success) {
    // should not be called
    expect(NO).to.beTruthy();
}];
while (!done && [startTime timeIntervalSinceNow] > -30) [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
// make sure it didn't time out
expect(done).to.beTruthy();
person Christopher Pickslay    schedule 01.11.2012
comment
expecta — это библиотека утверждений, которую мы используем в наших тестах. Это утверждение эквивалентно GHAssertTrue(done, @"Check for result block should not have timed out."); - person Christopher Pickslay; 02.11.2012

Вот что я бы сделал вместо этого:

  • Добавьте свойство в тестовый класс, чтобы указать, какой блок был вызван
  • Пусть каждый блок задает для этого свойства другое значение.
  • Вызов
  • Проверить стоимость имущества
person Jon Reid    schedule 01.11.2012