2013-07-29 4 views
2

unittests를 실행할 때 특정 로케일을 강제 실행하는 방법이 있습니까?특정 로케일을 사용하여 unittest 실행 (ko 또는 none)

예 : 항상 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"; 
+2

체크 아웃 http://stackoverflow.com/questions/1669645/how-to-force-nslocalizedstring-to-use-a-specific-language – robinkunde

+0

이 답변은 문제를 해결하는 방법입니다. https : // stackoverflow .com/a/19325897/211292 – ThomasW

답변

0

특정 로케일에서 단위 테스트를 실행하는 방법이 있지만 단위 테스트에는 좋지 않지만 테스트에는 유용 ​​할 수 있습니다.

Xcode에서 Product -> Scheme -> Edit Scheme ... -> Test -> Options를 선택한 다음 'Application Language'팝업을 원하는 언어로 설정하십시오. 그러면 단위 테스트가 지정된 언어로 실행됩니다. 이를 사용하여 특정 로켈에 대한 코드를 테스트 할 수 있습니다. 특히 단위 테스트의 특정 하위 집합 만 실행하는 경우이 기능을 사용하여 실제로 앱을 실행하는 것보다 빠른 테스트 처리 시간을 얻을 수 있습니다. 그러나 지정된 언어로 제한되어 있기 때문에 일반적으로 단위 테스트에 유용하지 않습니다.

또한이 작업을 수행하면 .xcscheme이 수정되므로 작업이 끝나면 다시 변경해야합니다.

단위 테스트를위한 로케일을 변경하는 한 가지 방법은 지정된 기술 here을 사용하는 것입니다. 그러나이 기술은 Swift에서 작동하지 않는 메서드 Swizzling을 사용합니다.