Swift2.1でParameterized Testをどう書こうか、と考えた時、以下な感じでできそうに思えたのでメモ。
parametarized()にBlockとデータセットを与えることで、そのBlockの中の要素を全てBlockにて与えた処理を行う- 与えるパラメータは、
structで定義する
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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だとこんな感じが限界かな。複雑にしないようにすると…