[Swift]SwiftでParameterized Test?

Swift2.1でParameterized Testをどう書こうか、と考えた時、以下な感じでできそうに思えたのでメモ。

  • parametarized() にBlockとデータセットを与えることで、そのBlockの中の要素を全てBlockにて与えた処理を行う
  • 与えるパラメータは、 struct で定義する


import XCTest
class xctestSampleTests: XCTestCase {
// define for parameterized test
struct ParameterizedStruct {
var (one, two, expected): (Int, Int, Int)
}
func parameterized(params: [ParameterizedStruct], _ block: (ParameterizedStruct) -> Void) {
for param in params {
block(param);
}
}
func testParameterizedTesting() {
// define parameters
let data: [ParameterizedStruct] = [
ParameterizedStruct(one: 1, two: 2, expected: expectedMethod()),
ParameterizedStruct(one: 3, two: EnumSample.Zero.rawValue, expected: 3)
]
// Set test case as block case
parameterized(data, {
(paramStruct) in
// describe test cases
let item: Int? = paramStruct.one + paramStruct.two
XCTAssert(item == paramStruct.expected)
})
}
// Method which is used in parameters
func expectedMethod() -> Int {
return 3
}
// Enum which is used in parameters
enum EnumSample: Int {
case Zero, One, Two, Three
}
}

残課題

String をメソッド名に動的に変換する方法がよくわからなかったので動的に testXXXX といったメソッドを生成、実行することができていないです。なので、個々のテストケース要素に対して独立した結果を得ることができません。まとめて1つのテストケースの結果を受け取ることができるだけです。

んー。

締め

Swiftだとこんな感じが限界かな。複雑にしないようにすると…

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.