[英]Is it possible to use parameterised test case data with Xcode's XCTest Framework?
類似於NUnit 具有的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 使用 XCTest 框架添加了對參數化測試用例的支持。 下面是一個例子:
KNMParametersFor(testExample, @[ @"Hello", @"World" ]) - (void)testExample:(NSString *)word { NSString *result = [myUppercaser uppercaseString:word]; XCTAssertEqualObjects(result, [word uppercaseString], @"Uppercaser failed for word %@", word); }
看起來最簡單的安裝方法是通過 CocoaPods。
盡管 XCTest 沒有提供編寫參數化測試的正確方法,但我在 Godfrey Nolan 的書Agile Swift 的第 46 頁找到了一個不錯的簡單解決方法,它定義一個包含輸入和輸出值的元組數組,然后迭代數組中的每一項,如下所示:
func test_multiple() {
let cases = [(4,3,12),(2,4,8)]
cases.forEach {
XCTAssertEqual(myCalculator.multiply($0, $1), $2)
}
}
我能看到的這種方法的唯一警告是,您只會在測試導航器/測試報告中獲得一個條目,而不是每個測試用例都有一個條目。 但是在我看來,您不必一次又一次地編寫相同的測試(每個測試中只有輕微的變化)而節省的時間是非常值得的。
如果您想要在測試失敗的情況下收到一條不錯的消息,您可以通過向元組添加一個更多元素來輕松獲得它,該元素代表要傳遞到XCTAssertEqual
調用的消息,如下所示:
func test_multiple() {
let cases = [(4,3,12,"4 times 3"),(2,4,8,"2 times 4")]
cases.forEach {
XCTAssertEqual(myCalculator.multiply($0, $1), $2, $3)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.