MFMailComposeViewController
のインスタンスをインスタンス化するメソッドをテストしようとしています。テストされるメソッドは、MFMailComposeViewController
のいくつかのメソッドを呼びます(setSubject:
を含む)。テストメソッドから呼び出されたメソッドを持つクラスのOCMock
この場合、setSubjectに特定のNSString(この場合は@ Test Message)が送信されていることをテストします。
モックスタブの期待される文字列に何を指定しても、失敗はありません。
ユニットテストクラスで:TestClassをでは
#import <OCMock/OCMock.h>
- (void)testEmail {
TestClass *testInstance = [[TestClass alloc] init];
id mock = [OCMockObject mockForClass:[MFMailComposeViewController class]];
[[mock stub] setSubject:@"Test Message"];
[testInstance testMethod];
}
:
- (void)testMethod {
MFMailComposeViewController *mailComposeVC = [[MFMailComposeViewController alloc] init];
[mailComposeVC setSubject:@"Bad Message"];
}
Test Suite 'Email_Tests' started at 2011-09-17 18:12:21 +0000
Test Case '-[Email_Tests testEmail]' started.
Test Case '-[Email_Tests testEmail]' passed (0.041 seconds).
テストが失敗しているべきです。
これはiOSシミュレータでテストしており、デバイスで同じ結果が得られます。
私は間違っていますか?これを達成するための方法はありますか?
ありがとう!私はユニットテスト容易性のためにテストとコードを書く方法を学んでいます。このケースでは、レガシーコードにユニットテストを追加しています。そのため、私がそれらを実装した後まで、ユニットテストを変更する必要はありません。 1点、私は 'MFMailComposeViewController'のモックを渡そうとしましたが、合格テストでは動作しましたが、失敗したテストではクラッシュしました。これは通常のOCMockですか?また、可能な場合にはARCでコードを書く傾向がありますが、わかりやすくするために私は意図的にメモリ管理を省略しました。 – zaph
OCMockは例外を発生させて失敗を報告します。 SenTestingKitは例外をキャッチして報告するように設計されていますが、残念なことにSimulatorのバグにより、代わりにクラッシュします。私はこれを避ける代替の模擬フレームワークに取り組んでいますが、まだ準備はできていません。 –