【问题标题】:Run unittests with a specific locale (en_US or none)使用特定语言环境运行单元测试(en_US 或无)
【发布时间】:2013-07-29 16:15:37
【问题描述】:

有没有办法在运行单元测试时强制使用特定的语言环境?

例如。始终使用 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";

【问题讨论】:

标签: ios cocoa nslocalizedstring nslocale sentestingkit


【解决方案1】:

有一种方法可以在特定的语言环境中运行单元测试,但它不适合单元测试,但它对测试很有用。

在 Xcode 中,转到产品 -> 方案 -> 编辑方案... -> 选择测试 -> 选项,然后将“应用程序语言”弹出窗口设置为所需的语言。然后您的单元测试将以指定的语言运行。您可以使用它来测试特定语言环境的代码。您可以使用它来获得比实际运行应用程序更快的测试周转时间,特别是如果您只运行特定的单元测试子集。但是,它通常对单元测试没有用处,因为您仅限于指定的语言。

此外,这样做会修改您的 .xcscheme,因此您需要在完成后将其改回。

更改单元测试区域设置的一种方法是使用指定的技术here。但是,该技术使用方法混合,这不适用于 Swift。

【讨论】:

  • @Serzhas 您使用了哪种解决方案? Edit Scheme 或 swizzling?
  • 我刚刚编辑了方案并明确指定了应该使用哪个区域进行测试(编辑方案 -> 测试 -> 选项 -> 应用程序区域)。 ?
【解决方案2】:

只需在运行选项中指定语言即可。

【讨论】:

    【解决方案3】:

    发布正确答案,以便您将其标记为已回答。

    How to force NSLocalizedString to use a specific language 有解决这个问题的办法。

    【讨论】:

      猜你喜欢
      • 2021-08-06
      • 2015-03-24
      • 1970-01-01
      • 2013-05-21
      • 2018-04-19
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多