我有类似
的东西- (void)getData:(SomeParameter*)param
{
// Remotely call out for data returned asynchronously
// returns data via a delegate method
}
- (void)handleDataDelegateMethod:(NSData*)data
{
// Handle returned data
}
我想为此编写一个单元测试,我怎样才能做比
更好的事情NSData* returnedData = nil;
- (void)handleDataDelegateMethod:(NSData*)data
{
returnedData = data;
}
- (void)test
{
[obj getData:param];
while (!returnedData)
{
[NSThread sleep:1];
}
// Make tests on returnedData
}
答案 0 :(得分:1)
让您的对象通过getData:
方法调用模拟并检查它是否正确调出。
使用一些现成的数据从另一个测试中调用handleDelegateMethod:
方法,并确保它对所提供的数据执行任何操作。
答案 1 :(得分:1)
如果无法将模拟数据发送回您的代表,Chuck说您可以执行以下操作:
让您的考试成为代表 收到回调。
将字段添加到测试类callBackInvoked和errorHasOccurred。将它们都设置为NO。
拨打getData
绕过主要的runloop,as 如下:
NSDate *twoSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:2.0];
while (!callBackInvoked && !errorHasOccured && runCount-- && [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:twoSecondsFromNow]) {
twoSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:2.0];
}
(您可以将runCount设置为您认为合理等待的次数)。
在测试类的handleDataDelegateMethod中,将callBackInvoked设置为YES。同样,如果您有错误回调,则可以将errorHasOccured设置为YES。
您的测试应断言callBackInvoked为YES且erroHasOccurred为NO。