2011-06-21 21 views
3

私はiOSアプリケーションのテストを書き始めました。私はXcode4とOCUnitを使用しています。私は今、このように、静的変数がすでに割り当てられている場合に例外をスローする必要があり、コードの部分のためのテストを書いている:NSAssertアサーションエラーのためにテストが失敗する

NSAssert(controllerInstance == nil, @"another controller is already in use!"); 

を私のテストでは、私は上記のコードをスローすることを確認するためにSTAssertThrowsを使用しますインスタンスがすでに存在する場合はエラー。問題は、このテストでは失敗します:

*** Assertion failure in (reference to row with NSAssert) 

したがって、動作が正しく動作していてもテストは失敗します。しかし、STAssertThrowsこれをキャッチしないでください? NSAssertと一緒にこのようにSTAssertThrowsを使用しないでください。

答えて

3

assertion handlerは、このメッセージを表示します。の前に例外が発生しています。そうでなければ、STAssertThrows()はおそらくアサーションの失敗を無視します。

いずれにしても、なぜNSAssertが動作するかテストしていますか?あなたはCocoaフレームワークを信頼しませんか?

編集

はちょうどあなたの質問に第二部に気づきました。答えはいいえです。このようにSTAssertThrowsとNSAssertを一緒に使うべきではありません。 NSAssert()は、プログラマの前提が偽であるプログラミングエラーの場合を拾うためにあります。定義上、アサートするコードがテストケースに失敗しました。

+1

よろしくお願いします。このケースではNSAssertを使用しません。テストケースでコードがどのように機能するかについての前提を収集することになります。 – Cactuar

関連する問題