XCTest中没有加载本地化?

9
我在Xcode中有一个仅配置了测试的模式。该模式指向一个包含所有测试的目标(这是用于OS X的Cocoa单元测试Bundle目标)。

因此,我运行所有这些测试,使用Command+U也可以成功运行。然而,有几个测试需要访问本地化资源。我将这些资源添加到我的目标中,并检查生成的二进制文件,确保本地化资源已经存在。

但是,代码看不到这些资源,所以当任何测试调用NSLocalizedString后,它返回一个关键字,而不是本地化字符串。

是否有特殊的操作来使测试能够识别这些资源呢?

1个回答

6
这个问题的发布日期有点旧了,但我遇到了同样的问题。我在一篇博客上找到了一个很棒的文章,描述了这个问题并提供了一个很好的解决方案。
他有两个解决方案,第一个(对我没用):
替换
[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;
}

希望这篇文章能帮助未来查看此贴的人。

https://web.archive.org/web/20170823223847/http://drekka.ghost.io/the-state-of-xcode-unit-testing/ 的链接已失效。 - shim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接