1

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

例如,我有一个包含很多内容的大项目UIViewcontrollers

我想为每个控制器制作单独的测试文件。像 1 用于登录,另一个用于配置文件 UIViewcontroller

我知道框架处于早期阶段,但任何帮助表示赞赏。

谢谢。

4

1 回答 1

4

在 Subliminal 中,测试驱动你的应用程序,而不是相反。您绝对可以拥有对应于不同视图控制器的测试,但这些测试负责导航到应用程序中这些控制器的视图。

该导航通常在测试的实现中完成-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

请注意,您的测试在已知位置开始和结束非常重要,分别是 in-setUpTest-tearDownTest——您不能依赖于以特定顺序执行的 Subliminal 测试。

那么,您将如何测试配置文件屏幕呢?假设在您的应用程序中,配置文件在登录后立即显示。然后,配置文件测试将如下所示:

@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验证登录 UI 是否正常工作,ProfileTest通过该 UI 并不重要。相反,它可以要求应用程序登录。就在您的应用程序委托启动测试之前,它可能会注册一个“登录管理器”单例,以便能够以编程方式登录测试用户:

[[SLTestController sharedTestController] registerTarget:[LoginManager sharedManager] 
                                           forAction:@selector(logInWithInfo:)];

然后,-[ProfileTest setUpTest]可以调用:

[[SLTestController sharedTestController] sendAction:@selector(logInWithInfo:)
                                         withObject:@{
                                                        @"username": @"john@foo.com",
                                                        @"password": @"Hello1234"
                                                     }];
于 2013-06-26T10:18:35.963 回答