2

伙计们:

我正在开发一个应用程序,并通过单元测试来构建它。

但是,我现在处于需要测试异步调用的情况。例如,

- (void)testUserInfoBecomesValidWhenUserIsBuiltSuccessfully
{
    if ( ![userBuilder userInfoUpToDate] )
    {
        [userBuilder buildUser];
    }

    STAssertTrue([userBuilder userInfoUpToDate], @"User information is not valid before building the user");
}

测试这些东西的一般做法是什么?userInfoUpToDate 预计将异步更新。

谢谢!威廉

4

2 回答 2

4

有时会很想测试你通常不会使用单元测试测试的东西。这基本上来自误解和测试一切的愿望。然后你意识到你不知道如何用单元测试来测试它。

你最好问问自己——我在这里测试什么?

我是否测试在请求完成之前数据不可用?

然后你可以编写测试的非异步版本,它将在请求完成后检查数据是否可用。

我是否在请求后测试响应是否正确保存?

您还可以使用逻辑中的标志对其进行测试。

您可以在不运行异步测试的情况下进行所有逻辑测试。

所以在底部我什至会问你为什么你认为你需要测试异步调用?

单元测试应该快速运行 - 所以将其视为不测试异步调用的另一个原因。想象一下运行这些测试的持续集成系统——它需要额外的时间。

并阅读您对另一个答案的评论 - 我认为在测试中使用异步并不常见。例如 TDD 书中的 Kent Beck。提到并发单元测试是可能的,但非常罕见。

那么 - 你真的想测试什么以及为什么?

于 2013-03-27T19:54:49.183 回答
2

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

于 2013-02-14T14:49:18.350 回答