Below is my simple test class. As you can see, I am using defaultTestSuite
to create parameterized test methods. I am failing the test on purpose when value is 2. The problem I am facing is that, I have configured test plan to retry the tests on failure. So, when test 2 fails, XCode retries it and it's failing because self.number
is nil
.
Question: How can I re-run the parameterized test without variables having nil
values?
import XCTest
final class HelloiOSUITests: XCTestCase {
var number: Int?
override func setUpWithError() throws {
continueAfterFailure = false
}
func testExample() throws {
guard let num = self.number else {
XCTFail("Failed with NPE")
throw NSError()
}
print("Running for number: \(num)")
if num == 2 {
XCTFail("Failing on purpose to demonstrate NPE issue.")
}
}
override class var defaultTestSuite: XCTestSuite {
get {
let suite = XCTestSuite(name: NSStringFromClass(self))
addTestCase(to: suite, value: 1)
addTestCase(to: suite, value: 2)
addTestCase(to: suite, value: 3)
print("Test method count = \(suite.testCaseCount)")
return suite
}
}
static func addTestCase(to suite: XCTestSuite, value: Int) {
for invocation in self.testInvocations {
let testMethod = HelloiOSUITests(invocation: invocation)
testMethod.number = value
suite.addTest(testMethod)
}
}
}
Please try using :