neo*_*eye 6 cocoa nslocalizedstring ios nslocale sentestingkit
有没有办法在运行单元测试时强制使用特定的语言环境?
例如。始终使用 en_US 或强制无语言环境,以便不加载任何 .lproj 文件。
我的单元测试对设置应用程序(在 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";
Run Code Online (Sandbox Code Playgroud)
有一种方法可以在特定的语言环境中运行单元测试,但它不适用于单元测试,但它对测试很有用。
在 Xcode 中,转到 Product -> Scheme -> Edit Scheme… -> 选择 Test -> Options 然后将“Application Language”弹出窗口设置为所需的语言。然后您的单元测试将以指定的语言运行。您可以使用它来测试特定语言环境的代码。您可以使用它来获得比实际运行应用程序更快的测试周转时间,尤其是当您只运行单元测试的特定子集时。但是,它通常对单元测试没有用,因为您仅限于指定的语言。
此外,这样做会修改您的 .xcscheme,因此您需要在完成后将其更改回来。
更改单元测试区域设置的一种方法是使用此处指定的技术。但是,该技术使用了方法 swizzling,这不适用于 Swift。
| 归档时间: |
|
| 查看次数: |
5874 次 |
| 最近记录: |