iOS单元测试:XCTestSuite,XCTest,XCTestRun,XCTestCase方法

Boo*_*oon 5 tdd unit-testing ios7 xcode5

在我使用Xcode编写的日常单元测试中,我只使用XCTestCase.还有其他类似乎没有得到太多使用,例如:XCTestSuite,XCTest,XCTestRun.

什么是XCTestSuite,XCTest,XCTestRun?你什么时候使用它们?

此外,XCTestCase标头有一些方法,如:

defaultTestSuite
invokeTest
testCaseWithInvocation:
testCaseWithSelector:
Run Code Online (Sandbox Code Playgroud)

如何以及何时使用上述?

我无法找到有关上述XCTest类和方法的文档.

Zig*_*ong 6

嗯,这个问题很好,我只是想知道为什么这个问题被忽略了。

正如文件所说:

XCTestCaseXCTest的具体子类,它应该是大多数开发人员为其项目创建测试的覆盖点。一个测试用例子类可以有多个测试方法,并支持为每个测试方法执行的设置和拆除以及类级别的设置和拆除。

另一方面,这是XCTestSuite定义的:

XCTest 的具体子类 XCTestSuite 是测试用例的集合。或者,测试套件可以提取要自动运行的测试。

好吧,使用XCTestSuite,您可以为特定的测试用例子集构建自己的测试套件,而不是[XCTestCase defaultTestSuite]作为所有测试用例的默认套件 ( )。

实际上,默认的 XCTestSuite 由在运行时环境中找到的每个测试用例组成——所有方法都没有参数,没有返回值,并且在 XCTestCase 的所有子类中都以“test”为前缀。

怎么样的XCTestRun课?

测试运行收集有关测试执行的信息。显式测试断言中的失败被归类为“预期的”,而无关或未捕获的异常导致的失败被归类为“意外”。

有了XCTestRun,你可以记录信息喜好startDatetotalDurationfailureCount等当测试开始,还是像有些事情hasSucceeded做的时候,所以你得到了运行测试的结果。XCTestRun使您能够控制测试中正在发生或发生的事情。

回到XCTestCase,你会注意到有命名的方法testCaseWithInvocation:testCaseWithSelector:如果你阅读源代码。我建议你做更多的挖掘。

它们如何协同工作?

我发现Quick 的 QuickSpec 源文件中有一个很棒的解释。

XCTest 自动编译包含在测试目标中的 XCTestCase 子类列表。它遍历该列表中的每个类,并为每个测试方法创建该类的新实例。然后它创建一个“调用”来执行该测试方法。该调用是 NSInvocation 的一个实例,它表示在 Objective-C 中发送的单个消息。在 XCTestCase 实例上设置调用,并运行测试。

一些链接:

http://modocache.io/probing-sentestingkit https://github.com/Quick/Quick/blob/master/Sources/Quick/QuickSpec.swift https://developer.apple.com/reference/xctest/xctest?语言=对象


jia*_*npx -3

启动你的Xcode,并使用cmd + shift + O打开快速打开对话框,只需输入“XCTest”,你会发现一些相关文件,例如XCTest.h,XCTestCase.h ...你需要进入这个文件来检查接口他们提供。

有一个关于XCTest的很好的网站:http ://iosunittesting.com/xctest-assertions/