9

我在 Xcode 中有一个模式,它只配置了测试。这个模式指向一个包含我所有测试的目标(这是 OS X 的 Cocoa Unit Testing Bundle 目标)。

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

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

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

4

1 回答 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;
}

希望这对将来查看此帖子的人有所帮助。

于 2014-08-08T23:19:27.493 回答