2013-07-29 50 views
2

有沒有在運行unittests時強制特定語言環境的方法?運行具有特定語言環境的單元測試(en_US或none)

例如,總是使用en_US或強制任何語言環境,這樣就不會加載任何.lproj文件。

我的單元測試對Settings應用程序中的當前所選語言(在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"; 
+2

退房http://stackoverflow.com/questions/1669645/how-to-force-nslocalizedstring-to-use-a-specific-language – robinkunde

+0

此答案是一種解決此問題的方法:https:// stackoverflow的.com /一個/211292分之19325897 – ThomasW

回答

0

有一種方法可以在特定語言環境中運行單元測試,但它不適用於單元測試,但它對測試非常有用。

在Xcode中,轉至產品 - >方案 - >編輯方案... - >選擇測試 - >選項,然後將'應用程序語言'彈出菜單設置爲所需的語言。然後你的單元測試將以指定的語言運行。您可以使用它來測試特定語言環境的代碼。您可以使用它來獲得比實際運行應用程序更快的測試周轉時間,特別是如果您只運行特定的單元測試子集。但是,它通常不適用於單元測試,因爲您僅限於指定的語言。

此外,這樣做會修改您的.xcscheme,因此您需要在完成時更改它。

更改單元測試區域設置的一種方法是使用指定的技術here。但是,該技術使用Swizzling方法,它不適用於Swift。

相關問題