4

私は OCUnit Test クラスを持っています: PatientTestViewControllerTests。以下はインターフェースです:

@interface PatientTestViewControllerTests : SenTestCase

@property (nonatomic, strong) PatientTestViewController *testController;

@end

とセットアップ:

- (void) setUp
{    
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Testing" bundle:nil];
    self.testController = [storyboard instantiateInitialViewController];
}

'Testing' ストーリーボードは、アプリ内の唯一のストーリーボードであり、アプリのメイン ストーリーボードとして設定されています。PatientTestViewController は、ストーリーボードの唯一のビュー コントローラーとして設定されます。

テストクラスに 1 つのテストがあります。

- (void) testInitialTestingStoryboardViewIsPatientTest
{
    STAssertTrue([self.testController isMemberOfClass:[PatientTestViewController class]], @"Instead of the %@, we have %@",[PatientTestViewController class], [self.testController class]);
}

このテストは失敗し、次のログ メッセージが表示されます。

エラー: -[PatientTestViewControllerTests testInitialTestingStoryboardViewIsPatientTest]: "[self.testController isMemberOfClass:[PatientTestViewController クラス]]" は true である必要があります。PatientTestViewControllerの代わりに、PatientTestViewControllerがあります

どうすればいいの?以来

[self.testController isMemberOfClass:[PatientTestViewController class]]

どうやらテストログは両方とも

[self.testController class][PatientTestViewController class]

同じように見える?

追加情報:

  • テストでの使用[self.testController isKindOfClass:[PatientTestViewController class]]も失敗します
  • 使用[self.testController class] == [PatientTestViewController class]も失敗します。

  • パスを使用し [self.testController isKindOfClass:[UIViewController class]]ます。

  • [self.testController isMemberOfClass:[UIViewController class]]FAILSを使用します。
4

2 に答える 2

9

問題は、ViewControllerの.mファイルがアプリとテストバンドルの両方のターゲットに含まれている可能性があります。ocunit(およびKiwiなどの派生物)は、実装を明示的に含めることなく、アプリに含まれるクラスをテストで使用できるようにするテストハーネスを使用します。

両方を含めると、同じクラスの2つのコピーが得られます。そのため、説明は同じですが、メモリアドレスが異なります。

于 2012-07-26T20:06:44.490 に答える
3

あなたは一般的に望んisKindOfClass:でいて、そうではありませんisMemberOfClass:。違いは、受信者が問題のクラスのサブクラスのメンバーである場合に返されるのに対しisKindOfClass:、同じ場合に返されることです。YESisMemberOfClass:NO

を使用してクラスを直接比較することもできます[self.testController class] == [PatientTestViewController class]

于 2012-07-26T18:24:45.650 に答える