在Sen框架中测试异步响应

时间:2010-11-02 06:55:47

标签: iphone unit-testing testing iphone-sdk-3.0 ios4

我正在使用iPhone Sen测试框架进行测试。我需要测试来自服务器的异步响应。任何人都可以帮我找到测试它的方法。

谢谢

3 个答案:

答案 0 :(得分:3)

这可能是一个重复的问题,但我不同意原始问题的答案。我在这个问题上详细描述了原因。

总之,为测试创建自定义运行循环既复杂又脆弱。如果删除对返回异步响应的外部服务的依赖性并模拟测试中的响应,则测试将更加一致且更快地运行。这样,如果外部服务中断,您的测试将不会失败,并且您的测试将更快地运行。

有些库可以重新打开像NSURLConnection这样的类,并且可以轻松完成。由于Objective C Here is an example的动态属性,对单个类(如NSURLConnection)执行起来也相对简单。

答案 1 :(得分:1)

我不使用Sen测试,因为它不在模拟器或设备中运行(或者至少在去年我第一次开始做Objective C时没有),而是使用GHUnit作为测试框架和OCMock作为模拟框架。 GHUnit将在设备上运行测试,以确保代码正确。 OCMock允许完全模拟,部分模拟和方法调配,这是单元测试的强大工具。

我认为在这种情况下测试有两个部分。

  1. 单个测试各个组件(GHUnit和OCMock)。在这里,您可以直接调用方法并模拟您将运行的环境。因此,您不需要服务器设置来测试异步调用。只需在单元测试中实例化该类并调用它的方法。

  2. 集成测试。 (仅限GHUnit)在此您要进行基本测试,以确保您对代码与服务器之间的通信的理解是正确的。所以这就是你需要服务器的地方。根据您的需要,这可能是很多或一点点的工作。例如,当我这样做时,我刚刚设置了一个带有EJB3 bean的glassfish服务器来模拟我要连接的服务器。重要的是,您设置的服务器必须与最终生产服务器完全相同。

  3. 所以基本上这是一种双管齐下的方法。单元测试以检查代码的每个角落和裂缝。集成测试,以确保正确处理与服务器的整体通信。

    使用两者非常重要,因为虽然单元测试可以检查难以通过集成测试检查的功能,但它只能与您对类和服务器之间的通信的理解一样准确。因此,您至少需要一个基本的集成测试来确认您的理解是否正确。但是,不要浪费时间编写大量的集成测试来检查班级的每个角落。它总是比单元测试难得多。

答案 2 :(得分:0)

我用它来测试异步操作。

https://github.com/hfossli/AGWaitForAsyncTestHelper