Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c GHUnit,OCMock:如何测试是否调用了两个指定块中的一个?_Objective C_Ios_Unit Testing_Ocmock - Fatal编程技术网

Objective c GHUnit,OCMock:如何测试是否调用了两个指定块中的一个?

Objective c GHUnit,OCMock:如何测试是否调用了两个指定块中的一个?,objective-c,ios,unit-testing,ocmock,Objective C,Ios,Unit Testing,Ocmock,我有一个方法,它接受一个响应块和一个错误块,我通过给它提供有效数据和无效数据来编写单元测试,这样它将分别调用响应块和错误块,但是使用GHUnit和OCMock,我如何测试是否调用了正确的块 我在想: 有关有效数据: 回答 { GHAssertTrueYES,@; } 错误 { GHAssertTrueNO,@有效数据不应调用错误块; } 对于无效数据,反之亦然 我所做的正确吗?以下是我要做的: 向测试类添加属性以指示调用了哪个块 让每个块将该特性设置为不同的值 援引 检查属性的值 将断言放入块中

我有一个方法,它接受一个响应块和一个错误块,我通过给它提供有效数据和无效数据来编写单元测试,这样它将分别调用响应块和错误块,但是使用GHUnit和OCMock,我如何测试是否调用了正确的块

我在想:

有关有效数据: 回答 { GHAssertTrueYES,@; } 错误 { GHAssertTrueNO,@有效数据不应调用错误块; }

对于无效数据,反之亦然


我所做的正确吗?

以下是我要做的:

向测试类添加属性以指示调用了哪个块 让每个块将该特性设置为不同的值 援引 检查属性的值
将断言放入块中的问题是,如果两个块都没有被调用,您将不知道。我们就是这样做的:

__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();
是我们在测试中使用的断言库。该语句相当于GHAssertTruedone,@Check for result块不应超时。;