我可以多次运行XCTest套件吗?

时间:2015-07-02 22:08:50

标签: xcode unit-testing testing automated-tests xctest

是否可以让Xcode多次运行您的单元测试?

我在几个单元测试中遇到了导致间歇性故障的问题。现在,我认为我已修复它,我唯一的选择似乎是混合 + U 直到我95%确信这个错误消失了。

我知道其他单元测试框架可以很容易地多次运行单个测试,测试用例或测试套件。我们在XCTest中有这种奢侈品吗?

6 个答案:

答案 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调用)。