XCTest中未加载本地化?

时间:2013-11-08 00:09:43

标签: xcode macos localization xctest

我在XCode中有一个只配置了Test的模式。这个架构指向一个具有我所有测试的目标(这是OS X的Cocoa Unit Testing Bundle目标)。

所以,我执行Command + U来运行所有这些测试,它运行正常。但是,一些测试需要访问本地化资源。我将这些资源添加到我的目标中,甚至检查生成的二进制文件,其中包含本地化资源。

但是,代码没有看到资源,因此当任何测试执行NSLocalizedString时,它会返回一个键,而不是本地化的字符串。

我需要做些什么来让测试看到这些资源?

1 个答案:

答案 0 :(得分:5)

这个问题的发布日期有点旧,但我遇到了同样的问题。我在一篇描述这个问题的博客上发现了这篇精彩的文章,并且有一个很好的解决方案。

http://drekka.ghost.io/the-state-of-xcode-unit-testing/#xctestunittestsbug1incorrectbundleapplebug15306667

他有两个解决方案,第一个(对我不起作用):

替换

[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;
}

希望这可以帮助将来检查这篇文章的人。