Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用特定区域设置运行单元测试(en_US或none)_Ios_Cocoa_Nslocalizedstring_Nslocale_Sentestingkit - Fatal编程技术网

Ios 使用特定区域设置运行单元测试(en_US或none)

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

运行unittests时,有没有办法强制使用特定的区域设置?

始终使用en_US或force no locale,这样就不会加载任何.lproj文件

我的单元测试对设置应用程序(在iOS模拟器中)中当前选择的语言敏感。我希望我的单元测试不要对语言敏感

下面是我的unittest代码,它显示了这个问题

@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?我刚刚编辑了方案并明确指定了测试应该使用哪个区域(编辑方案->测试->选项->应用区域)。