XCTest中未加载本地化?

Vic*_*nin 8 macos xcode localization xctest

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

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

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

为了让测试看到这些资源,我需要做些什么特别的事情?

小智 5

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

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

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

更换

[NSBundle mainBundle]
Run Code Online (Sandbox Code Playgroud)

[NSBundle bundleForClass:[self class]]
Run Code Online (Sandbox Code Playgroud)

第二个解决方案(使用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;
}
Run Code Online (Sandbox Code Playgroud)

希望这有助于将来检查这篇文章的人.