回答
这可能是一个重复的问题,但我不回答原来的同意。我已经在这个问题上描述了为什么。
总之,为您的测试创建自定义运行循环是复杂而脆弱的。如果删除对返回异步响应的外部服务的依赖关系,并在测试中模拟响应,则您的测试将运行得更加一致且更快。这样,如果外部服务停止,您的测试不会失败,并且您的测试运行速度会更快。
有一些库可以重新打开NSURLConnection这样的类,并使其很容易实现。由于Objective C的动态属性,对于单个类(如NSURLConnection)也是相对简单的。Here is an example。
我不使用森测试,因为它不会在模拟器或设备上运行(或者至少没有当我第一次开始做Objective C的最后一年),而不是我用GHUnit作为一个测试框架和OCMock作为嘲弄的框架。 GHUnit将在设备上运行测试,以确保代码的正确性。 OCMock允许完全嘲笑,部分模拟和方法调整,这是强大的单元测试工具。
我认为在这种情况下有两个部分要测试。
单元测试单个组件(GHUnit和OCMock)。在这里你可以直接调用方法并模拟你的类将运行的环境。所以你不需要服务器设置来测试异步调用。只需在单元测试中实例化该类并将其称为方法。
集成测试。 (仅适用于GHUnit)在这里您要做一个基本的测试,以确保您对代码和服务器之间的通信的理解是正确的。所以这是你需要服务器的地方。根据您的需求,这可能是一个或很多工作量。例如,当我这样做时,我刚刚安装了一个带有EJB3 bean的glassfish服务器来模拟我要连接的服务器。重要的是,您设置的服务器必须与最终生产服务器的行为完全相同。
所以基本上这是一个双管齐下的方法。单元测试检查代码的每个角落。集成测试以确保正确处理与服务器的整体通信。
使用两者很重要,因为虽然单元测试可以检查难以用集成测试进行检查的功能,但它与您对类和服务器之间的通信的理解一样准确。所以你至少需要一个基本的集成测试来确认你的理解是正确的。但是不要浪费时间写很多集成测试来检查班级的每一个角落。它总是比单元测试困难得多。
听起来不错。期待用户使用这种方法。测试期间我遇到的其他事情是时间消耗。当我测试使用NSRunLoop时,需要很多时间。那么有什么方法可以在你的方法中并行处理测试用例吗? – Dilshan 2010-11-15 06:38:58
GHUnit的确将运行测试作为后台任务,并且如果需要的话可以将它们切换到主线程(例如UI Stuff)。我还发现一篇博客文章谈论通过在主线程上运行而不是后台运行所节省的时间,因为启动一个新线程需要花费时间:(http://jorudolph.wordpress.com/2009/ 23分之10/ ghunit-并行测试执行-性能影响/)。 GHUnit也可以使用SenTest测试。至于运行循环。从OCMock嘲笑你可能可以避免使用runloop。只是一个想法。 – drekka 2010-11-16 02:49:09
- 1. 测试Microsoft Bot框架异步回复
- 2. 播放框架异步响应错误
- 3. 测试响应是JsonArray - 播放框架2.4.2规格2测试
- 4. 特别支持测试异步代码的node.js的单元测试框架?
- 5. 单元测试同步框架
- 6. 虽然我尝试在iOS 6中运行我的代码抛出Sen测试框架错误。为什么?
- 7. 如何测试异步HTTP请求和响应Android
- 8. 测试异步rpc
- 9. Vert.x异步测试
- 10. Mockito测试框架WantedButNotInvoked异常
- 11. 在node.js中测试响应?
- 12. 异步框架TaskEx.Delay问题
- 13. 播放框架WebSocket异步
- 14. Yii框架异步请求
- 15. 异步测试在Nunit中挂起2.6.2
- 16. 在烧瓶中完成异步响应
- 17. 使用嵌套资源测试Django REST框架API响应
- 18. Spring MVC测试框架失败,出现HTTP响应406
- 19. Django Rest框架测试API响应声明
- 20. 在NodeJS中使用异步响应的异步调用
- 21. HTTP响应异步大型响应
- 22. Sinatra测试框架
- 23. JPA测试框架
- 24. Java测试框架
- 25. AI测试框架
- 26. Android测试框架
- 27. MATLAB测试框架
- 28. 硒测试框架
- 29. 单元测试setUp/tearDown是否在异步测试中工作?
- 30. 在iOS的单元测试中测试异步调用
可能的重复:http:// stackoverflow。com/questions/2162213/how-to-unit-test-asynchronous-apis – tonklon 2010-11-02 09:11:56
谢谢tonklon。 – Dilshan 2010-11-02 12:04:37