我有一个 OCUnit 测试类:PatientTestViewControllerTests。下面是界面:

@interface PatientTestViewControllerTests : SenTestCase

@property (nonatomic, strong) PatientTestViewController *testController;

@end

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

“测试” Storyboard是我的应用程序中唯一的 Storyboard,并被设置为应用程序的主 Storyboard。 PatientTestViewController 被设置为 Storyboard的唯一 View Controller 。

我的测试课中有一个测试:
- (void) testInitialTestingStoryboardViewIsPatientTest
{
    STAssertTrue([self.testController isMemberOfClass:[PatientTestViewController class]], @"Instead of the %@, we have %@",[PatientTestViewController class], [self.testController class]);
}

此测试失败并显示以下日志消息:

错误:-[PatientTestViewControllerTests testInitialTestingStoryboardViewIsPatientTest]:“[self.testController isMemberOfClass:[PatientTestViewController class]]”应该是真的。我们有 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]] PASSES。
  • 使用 [self.testController isMemberOfClass:[UIViewControllerclass]] 失败。
  • 最佳答案

    问题很可能是您的 View Controller 的 .m 文件包含在两个目标、应用程序和测试包中。 ocunit(以及 Kiwi 等衍生产品)使用测试工具,使应用程序中包含的类可用于测试,而无需显式包含它们的实现。

    包括两者会给你同一个类的两个副本,这就是为什么它们具有相同的描述但不同的内存地址。

    10-07 19:13
    查看更多