簡體   English   中英

是否可以在 Xcode 的 XCTest 框架中使用參數化測試用例數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM