我在Xcode中有一个仅配置了测试的模式。该模式指向一个包含所有测试的目标(这是用于OS X的Cocoa单元测试Bundle目标)。
因此,我运行所有这些测试,使用Command+U也可以成功运行。然而,有几个测试需要访问本地化资源。我将这些资源添加到我的目标中,并检查生成的二进制文件,确保本地化资源已经存在。
但是,代码看不到这些资源,所以当任何测试调用NSLocalizedString后,它返回一个关键字,而不是本地化字符串。
是否有特殊的操作来使测试能够识别这些资源呢?
因此,我运行所有这些测试,使用Command+U也可以成功运行。然而,有几个测试需要访问本地化资源。我将这些资源添加到我的目标中,并检查生成的二进制文件,确保本地化资源已经存在。
但是,代码看不到这些资源,所以当任何测试调用NSLocalizedString后,它返回一个关键字,而不是本地化字符串。
是否有特殊的操作来使测试能够识别这些资源呢?
[NSBundle mainBundle]
使用
[NSBundle bundleForClass:[self class]]
第二种解决方案(使用OCMock非常有效):
static id _mockNSBundle;
+(void)setUp {
_mockNSBundle = [OCMockObject niceMockForClass:[NSBundle class]];
NSBundle *correctMainBundle = [NSBundle bundleForClass:[self class]];
[[[[_mockNSBundle stub] classMethod] andReturn:correctMainBundle] mainBundle];
}
+(void)tearDown {
[_mockNSBundle stopMocking];
_mockNSBundle = nil;
}