2013-07-29 1 views
2

Есть ли способ принудительно установить определенный язык при запуске unittests?Запускать unittests с определенной локалью (en_US или none)

Например. всегда используйте en_US или не создавайте локаль, чтобы ни один из файлов .lproj не загружался.

Мой unittest чувствителен к выбранному в данный момент языку в приложении «Настройки» (в iOS Simulator). Я предпочитаю, чтобы мои собеседники не были чувствительны к языку.

Ниже мой 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"; 
+2

Ознакомьтесь с http://stackoverflow.com/questions/1669645/how-to-force-nslocalizedstring-to-use-a-specific-language – robinkunde

+0

Этот ответ является способом решения проблемы: https: // stackoverflow .com/а/19325897/211292 – ThomasW

ответ

0

Существует способ запуска модульных тестов в конкретной локали, но он не подходит для модульного тестирования, но может быть полезен для тестирования.

В Xcode перейдите к Product -> Scheme -> Edit Scheme ... -> select Test -> Options, а затем установите всплывающее окно «Application Language» на нужный язык. Затем ваши юнит-тесты будут работать на указанном языке. Вы можете использовать это для проверки кода для определенной локали. Вы можете использовать это, чтобы ускорить проверку теста, чем фактически запускать приложение, особенно если вы используете только определенный поднабор модульных тестов. Однако это не полезно для модульного тестирования в целом, потому что вы ограничены указанным языком.

Кроме того, это изменит вашу .xcscheme, поэтому вам нужно будет изменить это, когда закончите.

Одним из способов изменения языкового стандарта для модульного тестирования является использование указанной техники here. Однако этот метод использует метод swizzling, который не работает с Swift.

Смежные вопросы