TDD:unit testingasynchronous调用

球员:

我正在开发一个应用程序,并使用unit testing进行构build。

但是,我现在处于需要testingasynchronous调用的情况。 例如,

- (void)testUserInfoBecomesValidWhenUserIsBuiltSuccessfully { if ( ![userBuilder userInfoUpToDate] ) { [userBuilder buildUser]; } STAssertTrue([userBuilder userInfoUpToDate], @"User information is not valid before building the user"); } 

testing这些东西的一般做法是什么? userInfoUpToDate预计将被asynchronous更新。

谢谢! 威廉

有时候有一种诱惑来testing你通常不用unit testingtesting的东西。 这主要来自误解和想testing一切的愿望。 然后你意识到你不知道如何用unit testing来testing它。

你最好问自己 – 我在这里testing什么?

在请求完成之前testing数据是否可用?

然后,您可以编写testing的非asynchronous版本,在请求完成后检查数据是否可用。

请求后,我testing响应保存是否正确?

您也可以在您的逻辑中使用标志进行testing。

你可以做所有的逻辑testing,而不需要运行asynchronoustesting

所以在底部,我甚至会问你为什么你认为你需要testingasynchronous调用?

unit testing应该很快运行 – 所以认为这是另一个不testingasynchronous调用的原因。 想象一下运行这些testing的持续集成系统 – 这将需要额外的时间。

并阅读您的意见,以另一个答案 – 我认为在testing中使用asynchronous是不常见的。 例如TDD书中的Kent Beck。 提到并发unit testing是可能的,但非常罕见的情况。

那么 – 你为什么要testing?

使用运行循环,轮询直到完成或达到超时: http : //codely.wordpress.com/2013/01/16/unit-testing-asynchronous-tasks-in-objective-c/