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. テストvoidメソッドをどのようにユニット化しますか?
- 3. 機能テストでPUTをどのようにテストしますか?
- 4. コントローラでどのように機能をテストできますか?
- 5. イベントバスでアンドロイドに投稿されたテストメソッドをどのようにユニット化するのですか?
- 6. #defineはSwiftでどのように機能しますか?
- 7. TimerはSwiftでどのように機能しますか?
- 8. ProcessMaker 3.1.3-community:ユニットおよび機能テスト
- 9. VIMの機能はどのようにテストできますか?
- 10. Railsでこの機能テストをどのようにセットアップするのですか?
- 11. padAngle機能投げるエラー
- 12. Cでテストパフォーマンスの最適化をどのようにユニット化できますか?
- 13. Androidテスト - どのようにこの機能をテストできますか?
- 14. どのようにPythonのラムダでテストawsのアテナSQLクエリをユニットですか?
- 15. どのようにXspecユニットのテストを実装するには?
- 16. RxJava演算子のテスト複合論理をどのようにユニット化するのですか?
- 17. 子コントローラでこのメソッドをモックしてテストするにはどうすればよいですか?両方のテストは、このエラーを投げるよう
- 18. テストネットワーク接続をどのようにユニット化するのですか?
- 19. ユニット/機能テストの作成時にキャッシュを考慮する
- 20. どのブラウザでどのように機能をテストしますか?
- 21. 機能は機能しますが(boot.stepAIC)、別の機能 - 環境問題の中でエラーを投げますか?
- 22. どのようにユニットawwラムダ呼び出しをテストする?
- 23. データベース駆動機能のテストを自動化するにはどうすればよいですか?
- 24. PG800コピー機能がプログラミングエラーを投げる
- 25. api.addAsyncRequestTransformはapi.addAsyncRequestTransformを投げる機能エラー
- 26. rspec;どのようにこの機能をテストする?
- 27. XCUITestでどのようにテストに合格するのですか? iOS Swift
- 28. ダウンキャストのSwiftでのタイプ(of:)はどのように機能しますか?
- 29. 機械化がHTTP 403エラーを投げているのはなぜですか?
- 30. NSCodingを使用してSwift 3でエンコードおよびデコード機能がどのように機能しますか?
Fyodor Volchyokが示唆したように、XCTAssertThrowsErrorメソッドを使用する方が理にかなっていると思います。 –