3

iOSアプリのテストを書き始めたばかりです。Xcode4とOCUnitを使用しています。私は今、静的変数がすでに割り当てられている場合に例外をスローするコードのテストを書いています。たとえば、次のようになります。

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

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

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

そのため、動作がまさに私が望むものであるにもかかわらず、テストは失敗します。しかし、STAssertThrowsこれをキャッチするべきではありませんか?たぶん私はこのようにNSAssertを一緒に使うべきではありませんSTAssertThrowsか?

4

1 に答える 1

3

アサーションハンドラは、例外を発生させる前にそのメッセージを出力すると思います。そうでない場合は、STAssertThrows()おそらくアサーションの失敗を無視します。

いずれにせよ、なぜNSAssertが機能することをテストしているのですか?Cocoaフレームワークを信頼しませんか?

編集

あなたの質問の2番目の部分に気づきました。答えはノーです。このようにSTAssertThrowsとNSAssertを一緒に使用するべきではありません。 NSAssert()プログラマーの仮定が間違っているプログラミングエラーのケースをピックアップするためにあります。定義上、アサートするコードの一部はテストケースに失敗しました。

于 2011-06-21T08:50:33.903 に答える