iOS和XCode:了解自动测试

时间:2015-02-11 00:43:16

标签: ios objective-c xcode automated-tests

我创建了一个测试项目并注意到XCode生成了一个名为的测试类: YourProjectName-ProjectTests

这就是它的样子:

- (void)setUp {
    [super setUp];
    // Put setup code here. This method is called before the invocation of each test method in the class.
}

- (void)tearDown {
    // Put teardown code here. This method is called after the invocation of each test method in the class.
    [super tearDown];
}

- (void)testExample {
    // This is an example of a functional test case.
    XCTAssert(YES, @"Pass");
}

- (void)testPerformanceExample {
    // This is an example of a performance test case.
    [self measureBlock:^{
        // Put the code you want to measure the time of here.
    }];
}

有人能够解释我如何使用这些自动化测试方法吗?有关于此的官方文件吗?

这些测试是用作UI测试还是应用程序代码测试?或两者?

2 个答案:

答案 0 :(得分:1)

这是在Xcode中实现单元测试的方式。

setUp和TearDown方法用于准备测试单元所需的任何模拟数据(这是代码的选择部分)。

这两种测试方法只是一个例子。通常作为代码单元的作者,你很清楚该单元应该做什么,不应该做什么。

使用测试方法,您可以测试设备如何满足假设和期望。惯例是对单元行为的每个假设/期望有一个单独的测试方法。

例如,给定的类处理具有使所有字符串生成CAPS的方法的字符串,您将测试传递任何随机的nonCaps字符串仍将返回所有CAPS。 put none truing作为参数将返回nil或error。

所以基本上你测试你的单位表现得像预期的那样。

单元测试背后有一个完整的理论,这超出了这个线程的范围。只是Google吧。

答案 1 :(得分:1)

您通过XCTest执行UI测试,但它是专为单元测试而设计的。 Instruments具有UI Automation,专为UI测试而设计。

开放XCTestAssertions.h将为您提供XCTest中包含的内容的非常好的参考。通常所有断言都遵循类似的模式:

XCTAssertSomething(somethingBeingTested, @"A message to display if the test fails");

点击⌘5将打开测试导航器,它允许您运行所有测试,所有失败的测试或单个测试。您还可以通过单击编辑器中方法名称左侧的菱形来运行测试。

以下是使用XCTest进行单元测试时遇到的一些提示:

  • 断言中的最后一个参数是可选的,但在某些情况下,它可用于描述您正在寻找的行为。

  • 测试不按任何特定顺序运行,但您的测试无论如何也不应相互依赖。

  • 模拟对象让你测试远远超过基本断言。我喜欢OCMock

  • 您可以在测试中use instruments进行调试。

最后,如果您有权访问另一台计算机,您可以每天或每次提交时将OSX服务器设置为automatically run your tests,并在任何测试失败时通知您。