我有一个 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 等衍生产品)使用测试工具,使应用程序中包含的类可用于测试,而无需显式包含它们的实现。
包括两者会给你同一个类的两个副本,这就是为什么它们具有相同的描述但不同的内存地址。