Viewcontroller如何识别需要运行的测试类:潜意识框架

时间:2013-06-26 07:14:58

标签: ios testing automation subliminal

我想知道UIViewcontroller如何知道它需要选择哪个测试文件。

E.g。我有一个包含大量UIViewcontrollers的大项目。

我想为每个控制器制作单独的测试文件。与登录的1相似,个人资料 UIViewcontroller的其他内容。

我知道框架处于早期阶段,但感谢任何帮助。

感谢。

1 个答案:

答案 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先执行LoginTestLoginTest也会从已知状态开始。

为了简化此设置过程,您可以使用“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}}