如何编写应用程序测试,测试按下按钮时是否显示特定视图?

时间:2011-08-22 14:45:26

标签: iphone ios unit-testing xcode4

我正在查看apple的example code进行应用程序测试,而这一切都涉及特定视图中的更改。我想写一个断言如下的测试:

Given that I am seeing the Results view,
And I press the button for the first result,
Then I should see a Detail view,
And its controller's result property should be set to the first result

我将如何编写该测试用例?

2 个答案:

答案 0 :(得分:2)

在伪代码中,我认为你的测试会是这样的:

// in setUp, grab a reference to your desired view controllers & buttons
// in the test method:
//   press a tab (or whatever it takes) to navigate to the Results view
//   press the button for the first result (using target/action or however you have it set up)
     STAssertTrue([myNavigationController.visibleViewController isKindOfClass:[DetailViewController class]]);
     STAssertTrue([(DetailViewController *)myNavigationController.visibleViewController result] == /*first result from earlier*/);
// in tearDown, do cleanup if necessary

如果这还不够,您应该发布一些代码,以便我们更轻松地提供帮助。


修改:有关setUp的更多信息。我认为值得查看您链接到的示例代码中的实现:

- (void) setUp {
   app_delegate         = [[UIApplication sharedApplication] delegate];
   calc_view_controller = app_delegate.calcViewController;
   calc_view            = calc_view_controller.view;
}

app_delegatecalc_view_controllercalc_viewCalcApplicationTests类的实例变量,因此可以在任何-test...方法中使用它们。应用程序委托本质上是应用程序的控制器,它具有对主视图控制器的引用。我认为这是一种非常简单明智的做法。

答案 1 :(得分:2)

您还可以看一下由Square上的好人发布的开源集成测试框架。看起来它可以帮助您自动化一些如果您似乎感兴趣的UI级别交互测试。

我自己没有使用过这个框架,但是有必要查看它。

http://corner.squareup.com/2011/07/ios-integration-testing.html

希望这有帮助。