Xcode 的 XCTest 框架可以使用参数化测试用例数据吗?
Is it possible to use parameterised test case data with Xcode's XCTest Framework?
与 NUnit has 的 TestCaseAttribute
类似的东西,大致如下:
[TestCase(12,3,4)]
[TestCase(12,2,6)]
[TestCase(12,4,3)]
public void DivideTest(int n, int d, int q)
{
Assert.AreEqual( q, n / d );
}
是否可以在 Xcode 中提供像这样的参数化测试用例数据?
看起来 XCTest 没有内置此功能,但 GitHub 上有一个旨在添加此功能的项目。
来自他们的自述文件:
KNMParametrizedTest adds support for parametrized test cases using the XCTest framework. Here is an example:
KNMParametersFor(testExample, @[ @"Hello", @"World" ])
- (void)testExample:(NSString *)word
{
NSString *result = [myUppercaser uppercaseString:word];
XCTAssertEqualObjects(result, [word uppercaseString],
@"Uppercaser failed for word %@", word);
}
看起来最简单的安装方法是通过 CocoaPods。
虽然 XCTest 没有提供编写参数化测试的正确方法,但我在 page 46 of Godfrey Nolan's book Agile Swift 中找到了一个不错的简单解决方法,即定义一个包含输入和输出值的元组数组,然后将遍历数组中的每一项,如下:
func test_multiple() {
let cases = [(4,3,12),(2,4,8)]
cases.forEach {
XCTAssertEqual(myCalculator.multiply([=10=], ), )
}
}
我能看到的这种方法的唯一警告是,您只会在测试导航器/测试报告中获得一个条目,而不是每个测试用例都有一个条目。但是在我看来,您不必一次又一次地编写相同的测试(每次测试只有微小的变化)而节省的时间是非常值得的。
如果您想要在测试失败的情况下收到一条好消息,您可以通过向表示要传递给 XCTAssertEqual
调用的消息的元组再添加一个元素来轻松获得此信息,如下所示:
func test_multiple() {
let cases = [(4,3,12,"4 times 3"),(2,4,8,"2 times 4")]
cases.forEach {
XCTAssertEqual(myCalculator.multiply([=11=], ), , )
}
}
与 NUnit has 的 TestCaseAttribute
类似的东西,大致如下:
[TestCase(12,3,4)]
[TestCase(12,2,6)]
[TestCase(12,4,3)]
public void DivideTest(int n, int d, int q)
{
Assert.AreEqual( q, n / d );
}
是否可以在 Xcode 中提供像这样的参数化测试用例数据?
看起来 XCTest 没有内置此功能,但 GitHub 上有一个旨在添加此功能的项目。
来自他们的自述文件:
KNMParametrizedTest adds support for parametrized test cases using the XCTest framework. Here is an example:
KNMParametersFor(testExample, @[ @"Hello", @"World" ])
- (void)testExample:(NSString *)word
{
NSString *result = [myUppercaser uppercaseString:word];
XCTAssertEqualObjects(result, [word uppercaseString],
@"Uppercaser failed for word %@", word);
}
看起来最简单的安装方法是通过 CocoaPods。
虽然 XCTest 没有提供编写参数化测试的正确方法,但我在 page 46 of Godfrey Nolan's book Agile Swift 中找到了一个不错的简单解决方法,即定义一个包含输入和输出值的元组数组,然后将遍历数组中的每一项,如下:
func test_multiple() {
let cases = [(4,3,12),(2,4,8)]
cases.forEach {
XCTAssertEqual(myCalculator.multiply([=10=], ), )
}
}
我能看到的这种方法的唯一警告是,您只会在测试导航器/测试报告中获得一个条目,而不是每个测试用例都有一个条目。但是在我看来,您不必一次又一次地编写相同的测试(每次测试只有微小的变化)而节省的时间是非常值得的。
如果您想要在测试失败的情况下收到一条好消息,您可以通过向表示要传递给 XCTAssertEqual
调用的消息的元组再添加一个元素来轻松获得此信息,如下所示:
func test_multiple() {
let cases = [(4,3,12,"4 times 3"),(2,4,8,"2 times 4")]
cases.forEach {
XCTAssertEqual(myCalculator.multiply([=11=], ), , )
}
}