我有一个采用响应块和错误块的方法,我通过给出有效数据和无效数据来编写单元测试,因此它将分别调用响应块和错误块,但是使用GHUnit和OCMock,我该如何测试如果调用了正确的块?
我在想:
有效数据: 响应 { GHAssertTrue(YES,@“”); } 错误 { GHAssertTrue(NO,@“有效数据不应调用错误块”); }
,反之亦然,无效数据。
我做的是否正确?
答案 0 :(得分:0)
以下是我要做的事情:
答案 1 :(得分:0)
将断言置于块中的问题是您不知道是否都没有调用块。这就是我们的工作:
__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();