Swift 2.0スローでファンクションをテストする方法は?正しいErrorType
がスローされたと主張するにはどうすればよいですか?以下の機能や宣言を考えるSwiftでテスト投げ機能をどのようにユニット化するのですか?
14
A
答えて
25
ここでtはです:エラーは、いくつかの具体的なタイプのものであり、あなたはXCTAssertThrowsError()
のerrorHandler
パラメータを使用することができます彼XCTAssertThrowsError
を使用Fyodor Volchyok's answerのSwift 3
バージョン:
enum MyError: Error {
case someExpectedError
case someUnexpectedError
}
func functionThatThrows() throws {
throw MyError.someExpectedError
}
XCTAssertThrowsError(try functionThatThrows()) { error in
XCTAssertEqual(error as? MyError, MyError.someExpectedError)
}
また、あなたのError
列挙型は、値が関連付けられている場合、あなたはあなたの列挙型がEquatable
に準拠if case
ステートメントを使用(または作成する必要があります注意してくださいそれは、不必要な余分なコードになります
enum MyError: Error {
case someExpectedError
case someUnexpectedError
case associatedValueError(value: Int)
}
func functionThatThrows() throws {
throw MyError.associatedValueError(10)
}
XCTAssertThrowsError(try functionThatThrows()) { error in
guard case MyError.associatedValueError(let value) = error else {
return XCTFail()
}
XCTAssertEqual(value, 10)
}
11
:1が指定されている場合は5が機能してFirstError
に指定されている場合
enum SomeError: ErrorType {
case FifthError
case FirstError
}
func throwingFunction(x: Int) throws {
switch x {
case 1:
throw SomeError.FirstError
case 5:
throw SomeError.FifthError
default:
return
}
}
この関数は、FifthError
をスローします。
機能が正常に次のようにユニットテストを見ることができる実行されることを、テストするには:
func testNotError() {
guard let _ = try? throwingFunction(2) else {
XCTFail("Error thrown")
return
}
}
let _
も他の名前で置き換えることができるので、あなたはさらに出力をテストすることができます。
関係なく、ユニットテストはこのように見えることができるものErrorType
、関数がスローすることを主張しないように:あなたはそれがdo-catch
-statementで行うの特定ErrorType
をテストしたい場合は
func testError() {
if let _ = try? throwingFunction(5) {
XCTFail("No error thrown")
return
}
}
。これは他の言語と比較して最良の方法ではありません。
あなたは何catch
が実行されない場合は、他の全てのcatch
XCTFail()
の正しいErrorType
XCTFail()
とreturn
ためcatch
で
return
確認...あなたことを確認する必要があり
この要件を前提とすると、テストca seは次のようになります。
11
少なくともXcode 7。3(多分それ以前)を使用すると、使用できるビルトインXCTAssertThrowsError()
:何もテスト中にスローされない場合、あなたがこのようなものが表示されます
XCTAssertThrowsError(try methodThatThrows())
:
あなたが投げているかどうかを確認したい場合
enum Error: ErrorType {
case SomeExpectedError
case SomeUnexpectedError
}
func functionThatThrows() throws {
throw Error.SomeExpectedError
}
XCTAssertThrowsError(try functionThatThrows(), "some message") { (error) in
XCTAssertEqual(error as? Error, Error.SomeExpectedError)
}
関連する問題
- 1. テストMVCクラスをどのようにユニット化するのですか?
- 2. 機能テストでPUTをどのようにテストしますか?
- 3. コントローラでどのように機能をテストできますか?
- 4. VIMの機能はどのようにテストできますか?
- 5. Railsでこの機能テストをどのようにセットアップするのですか?
- 6. Cでテストパフォーマンスの最適化をどのようにユニット化できますか?
- 7. どのようにXspecユニットのテストを実装するには?
- 8. ユニット/機能テストの作成時にキャッシュを考慮する
- 9. 機能は機能しますが(boot.stepAIC)、別の機能 - 環境問題の中でエラーを投げますか?
- 10. どのブラウザでどのように機能をテストしますか?
- 11. テストネットワーク接続をどのようにユニット化するのですか?
- 12. データベース駆動機能のテストを自動化するにはどうすればよいですか?
- 13. 機械化がHTTP 403エラーを投げているのはなぜですか?
- 14. ユニットRenderMvcControllerをテストすることも可能ですか?
- 15. 仮想化ソフトウェアはどのように機能しますか?
- 16. pyUnitユニットによるMagentoのテストは良いアイデアですか?
- 17. Catmull-Romスプライン - どのように機能するのですか?
- 18. Google Chromeフレーム - どのように機能するのですか?
- 19. ファイルコンバータ。どのように機能するのですか?
- 20. Rails 3 + Transactions:どのように機能するのですか?
- 21. ウィンドウフック - どのように機能するのですか?
- 22. クライアント側ルーティング。どのように機能するのですか?
- 23. 。どのように機能するのですか?
- 24. XNA MathHelper.SmoothStep?どのように機能するのですか?
- 25. "thumbs_up"で機能しないように投票する
- 26. AngularJSでの結合と消化はどのように機能しますか?
- 27. ASP.NET MVCのBDDスタイルでユニット&統合テストを行うにはどうすればよいですか?
- 28. Geb機能テストをパフォーマンス/容量テストにどのように使用できますか?
- 29. Chromium/Chrome拡張機能のインラインインストールをローカルでテストするにはどうすればよいですか?
- 30. どのようにテストの実行を自動化するのですか
Fyodor Volchyokが示唆したように、XCTAssertThrowsErrorメソッドを使用する方が理にかなっていると思います。 –