运行单元测试时是否有办法强制使用特定区域设置?
EG。总是使用en_US或强制没有语言环境,因此没有加载任何.lproj文件。
我的unittest对“设置”应用中的当前所选语言(在iOS模拟器中)很敏感。我希望我的单元测试不会对语言敏感。
以下是显示问题的单元测试代码
@interface MYGalleryTests : SenTestCase
@end
@implementation MYGalleryTests
-(void)test0 {
// This test doesn't work.
// I get 'No pictures' when locale is en_US
// I get 'Ingen billeder' when locale is da_DK
NSString* actual = [MYGallery emptyMessage];
NSString* expected = @"EMPTY_MESSAGE";
STAssertEqualObjects(actual, expected, nil);
}
@end
@interface MYGallery : NSObject
+(NSString*)emptyMessage;
@end
@implementation MYGallery
+(NSString*)emptyMessage {
return NSLocalizedStringFromTable(@"EMPTY_MESSAGE", @"Gallery", @"Message shown when gallery is empty");
}
@end
en.lproj/Gallery.strings
/* Message shown when gallery is empty */
"EMPTY_MESSAGE" = "No pictures";
da.lproj/Gallery.strings
/* Message shown when gallery is empty */
"EMPTY_MESSAGE" = "Ingen billeder";
答案 0 :(得分:3)
有一种方法可以在特定的区域设置中运行单元测试,但它不适合单元测试,但它可以用于测试。
在Xcode中,转到产品 - >方案 - >编辑方案... - >选择测试 - >选项然后设置应用程序语言'弹出所需的语言。然后您的单元测试将以指定的语言运行。您可以使用它来测试特定区域设置的代码。您可以使用它来实现比实际运行应用程序更快的测试周转时间,特别是如果您只运行单元测试的特定子集。但是,它通常对单元测试没有用,因为您只能使用指定的语言。
此外,执行此操作会修改.xcscheme,因此您在完成后需要更改。
更改单元测试的语言环境的一种方法是使用指定的技术here。但是,该技术使用方法调配,这对Swift无效。
答案 1 :(得分:1)
发布正确答案,以便将其标记为已回答。
How to force NSLocalizedString to use a specific language有解决此问题的方法。
答案 2 :(得分:1)