是否可以让Xcode多次运行您的单元测试?
我有几个单元测试出现了间歇性故障。现在,我认为我已经解决了这个问题,但我的唯一选择似乎是一遍又一遍地按下⌘ + U,直到我有95%的信心这个错误已经消失。
我知道其他单元测试框架很容易多次运行单个测试、测试用例或测试套件。那么,在XCTest中我们是否也能拥有这种便利呢?
是否可以让Xcode多次运行您的单元测试?
我有几个单元测试出现了间歇性故障。现在,我认为我已经解决了这个问题,但我的唯一选择似乎是一遍又一遍地按下⌘ + U,直到我有95%的信心这个错误已经消失。
我知道其他单元测试框架很容易多次运行单个测试、测试用例或测试套件。那么,在XCTest中我们是否也能拥有这种便利呢?
对我来说,它在Swift中有效。
override func invokeTest() {
for time in 0...15 {
print("this test is being invoked: \(time) times")
super.invokeTest()
}
}
- (void)invokeTest
{
for (int i=0; i<100; i++) {
[super invokeTest];
}
}
可能会对您有帮助,使用:
func testMultiple() {
self.measureBlock() {
...
XCTAssert(errMessage == nil, "no error expected")
}
}
这将在多次运行self.measureBlock()内的代码以计算平均时间。
改变代码可能需要一些工作,但您可能仍然希望了解执行时间。
这个答案可能已经足够接近您想要的,并且很容易实现。
measureBlock
的调用中,但有人知道在 measureBlock
中块被执行了多少次吗? - T BlankmeasureBlock
块中,这样它们仍然会以随机顺序运行。感谢您与我一起研究此问题;我认为这是我们在 XCTest 中能做到的最好的方法。 - T Blank一种替代方法是通过命令行完成此操作。您可以使用-only-testing
参数运行单个测试,并避免使用test-without-building
来构建,即(为了清晰起见添加了换行符)
for i in {1..10}; \
do xcodebuild \
test-without-building \
-workspace MyApp.xcworkspace \
-scheme Debug \
-destination 'platform=iOS Simulator,OS=11.2,name=iPhone 8' \
-only-testing:MyApp.Tests/TestFile/myTest;
done
for
循环:func testMultiple() {
for _ in 0...100 {
...
XCTAssert(errMessage == nil, "no error expected")
}
}
func testMultiple() {
for _ in 0...100 {
...
XCTAssert(errMessage == nil, "no error expected")
}
}
func testPerformance() {
self.measureBlock() {
self.testMultiple()
}
}
Xcode 8 运行 measureBlock
代码 10 次。
我过去曾经非常成功地使用invokeTest()
覆盖(Xcode 10)。但是现在在Xcode 11中它不起作用(至少对我来说是这样)。我最终做的是:
func test99Loop() {
for i in 0..<LOOP_COUNT {
if i > 0 { tearDown(); sleep(1); setUp() }
test3NineUrls()
do { tearDown(); sleep(1) }
setUp()
test6NineCombine()
print("Finished Loop \(i)")
}
}
我显然使用了setup/teardown,这是多次执行的正确方式(因为第一个和最后一个由Xcode调用)。