我想知道UIViewcontroller
如何知道它需要选择哪个测试文件。
E.g。我有一个包含大量UIViewcontrollers
的大项目。
我想为每个控制器制作单独的测试文件。与登录的1相似,个人资料 UIViewcontroller
的其他内容。
我知道框架处于早期阶段,但感谢任何帮助。
感谢。
答案 0 :(得分:4)
在潜意识中,测试驱动你的应用程序,而不是相反。您绝对可以拥有与不同视图控制器相对应的测试,但测试负责导航到应用程序中的控制器视图。
导航通常在-setUpTest
的测试实现中完成。假设您的应用程序打开一个“主页”屏幕,其上有一个标题为“登录”的按钮;并且按下该按钮会导致显示“登录视图控制器”。测试该视图控制器的方法是将这样的测试添加到集成测试目标:
@interface LoginTest : SLTest
@end
@implementation
- (void)setUpTest {
// make sure we're at "Home", then:
SLButton *loginButton = [SLButton elementWithAccessibilityLabel:@"Log in"];
[loginButton tap];
}
/*
now test the login view controller:
- (void)testThat... { }
*/
- (void)tearDownTest {
// log out and go back to "Home"
}
@end
请注意,您的测试分别在-setUpTest
和-tearDownTest
的已知位置开始和结束非常重要 - 您不能依赖于以特定顺序执行的潜意识测试。
那么你将如何测试个人资料屏幕呢?让我们说,在您的应用程序中,登录后立即显示配置文件。然后,配置文件测试将如下所示:
@interface ProfileTest : SLTest
@end
@implementation
- (void)setUpTest {
// Log in
}
/*
now test the profile view controller:
- (void)testThat... { }
*/
- (void)tearDownTest {
// log out and go back to "Home"
}
@end
你看到ProfileTest
应该做它想要测试的视图所需要的东西 - 在这种情况下,登录。(这就是为什么LoginTest
注销和去的重要性返回-tearDownTest
中的“主页”,以便即使ProfileTest
先执行LoginTest
,LoginTest
也会从已知状态开始。
为了简化此设置过程,您可以使用“app hooks”。通过ProfileTest
验证登录UI是否有效,[[SLTestController sharedTestController] registerTarget:[LoginManager sharedManager]
forAction:@selector(logInWithInfo:)];
通过该UI并不重要。相反,它可以要求应用程序登录。在应用程序委托启动测试之前,它可能会注册一个“登录管理器”单例,因为它能够以编程方式记录测试用户:
-[ProfileTest setUpTest]
然后,[[SLTestController sharedTestController] sendAction:@selector(logInWithInfo:)
withObject:@{
@"username": @"john@foo.com",
@"password": @"Hello1234"
}];
可以调用:
{{1}}