我有一个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];
}
“测试”情节提要板是我的应用程序中唯一的情节提要板,并设置为该应用程序的主情节提要板。 PatientTestViewController设置为情节提要的唯一视图控制器。
我的测试班有一个测试:
- (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:[UIViewControllerclass]]
失败。 最佳答案
问题可能是您的视图控制器的.m文件同时包含在两个目标(应用程序和测试包)中。 ocunit(以及类似Kiwi的派生类)使用测试工具,使应用程序中包含的类可用于测试,而无需明确包含其实现。
包括两者都给了您相同类的两个副本,这就是为什么它们具有相同的描述但具有不同的内存地址的原因。