是否可以让Xcode多次运行您的单元测试?
我在几个单元测试中遇到了导致间歇性故障的问题。现在,我认为我已修复它,我唯一的选择似乎是混合⌘ + U 直到我95%确信这个错误消失了。
我知道其他单元测试框架可以很容易地多次运行单个测试,测试用例或测试套件。我们在XCTest中有这种奢侈品吗?
答案 0 :(得分:3)
它可能会帮助您使用
func testMultiple() {
self.measureBlock() {
...
XCTAssert(errMessage == nil, "no error expected")
}
}
这会多次运行self.measureBlock()中的代码来测量平均时间。
更改代码是有效的,但您可能想知道执行时间。
这个答案可能足够接近你想要的,而且很容易做到。
答案 1 :(得分:2)
尝试覆盖调用测试:https://developer.apple.com/documentation/xctest/xctestcase/1496282-invoketest?language=objc
- (void)invokeTest
{
for (int i=0; i<100; i++) {
[super invokeTest];
}
}
答案 2 :(得分:1)
另一种方法是通过命令行执行此操作。您可以使用127.0.0.1:5000/process
参数运行单个测试,并避免使用-only-testing
进行构建,即(为清晰起见添加了新行)
test-without-building
答案 3 :(得分:0)
尝试使用for
循环:
func testMultiple() {
for _ in 0...100 {
...
XCTAssert(errMessage == nil, "no error expected")
}
}
请注意,这不适用于self.measureBlock()
。您将获得NSInternalConsistencyException: Cannot measure metrics while already measuring metrics
但是,您可以在measureBlock()
:
func testMultiple() {
for _ in 0...100 {
...
XCTAssert(errMessage == nil, "no error expected")
}
}
func testPerformance() {
self.measureBlock() {
self.testMultiple()
}
}
Xcode 8运行measureBlock
代码10次。
答案 4 :(得分:0)
对我来说,它工作迅速
override func invokeTest() {
for time in 0...15 {
print("this test is invoking: \(time) times")
super.invokeTest()
}
}
答案 5 :(得分:0)
我过去曾经使用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调用)。