Ios 使用特定区域设置运行单元测试(en_US或none)
运行unittests时,有没有办法强制使用特定的区域设置? 始终使用en_US或force no locale,这样就不会加载任何.lproj文件 我的单元测试对设置应用程序(在iOS模拟器中)中当前选择的语言敏感。我希望我的单元测试不要对语言敏感 下面是我的unittest代码,它显示了这个问题Ios 使用特定区域设置运行单元测试(en_US或none),ios,cocoa,nslocalizedstring,nslocale,sentestingkit,Ios,Cocoa,Nslocalizedstring,Nslocale,Sentestingkit,运行unittests时,有没有办法强制使用特定的区域设置? 始终使用en_US或force no locale,这样就不会加载任何.lproj文件 我的单元测试对设置应用程序(在iOS模拟器中)中当前选择的语言敏感。我希望我的单元测试不要对语言敏感 下面是我的unittest代码,它显示了这个问题 @interface MYGalleryTests : SenTestCase @end @implementation MYGalleryTests -(void)test0 { // T
@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";
张贴正确答案,以便您可以将其标记为已回答
有解决此问题的方法。有一种方法可以在特定区域中运行单元测试,但这对单元测试不好,但对测试很有用 在Xcode中,转到产品->方案->编辑方案…->选择测试->选项,然后将弹出的“应用程序语言”设置为所需语言。然后,单元测试将以指定的语言运行。您可以使用它来测试特定区域设置的代码。您可以使用它来获得比实际运行应用程序更快的测试周期,特别是当您只运行特定的单元测试子集时。但是,一般来说,它对单元测试没有用处,因为您仅限于指定的语言 此外,这样做会修改.xcscheme,所以完成后需要将其更改回原来的状态
更改单元测试的区域设置的一种方法是使用指定的技术。但是,该技术使用方法swizzling,这不适用于Swift。只需指定lang in run选项
看看这个答案,它是解决问题的一种方法:@Serzhas您使用了哪种解决方案<代码>编辑方案或swizzling?我刚刚编辑了方案并明确指定了测试应该使用哪个区域(编辑方案->测试->选项->应用区域)。