【问题标题】:Modify InstalledUICulture in c#在 c# 中修改 InstalledUICulture
【发布时间】:2017-11-07 13:53:47
【问题描述】:

有没有办法在测试中将 InstalledUICulture 从英语更改为德语?

var groups = new ObservableDictionary<string, IGroupViewModel>(vm => 
    vm.Name.ToString(CultureInfo.InstalledUICulture));
var isGroupExists = groups.ContainsKey(GroupName.ToString(CultureInfo.InstalledUICulture));
if (!isGroupExists)
{
     groups.Add(new GroupViewModel());
}

【问题讨论】:

  • 可能不是 a) 属性是 get only 和 b) 它被记录为 “Windows API 中 GetSystemDefaultUILanguage 的等效项。”。如果您想在不同文化下测试功能,请不要直接访问该属性,而是使用间接访问,这样您就可以返回您想要测试的内容,例如 InstalledUiCultureProvider 类。
  • 你能给我举个例子吗?
  • 显示您当前的使用情况InstalledUICulture
  • var groups = new ObservableDictionary&lt;string, IGroupViewModel&gt;(vm =&gt; vm.Name.ToString(CultureInfo.InstalledUICulture)); var isGroupExists = groups.ContainsKey(GroupName.ToString(CultureInfo.InstalledUICulture)); if (!isGroupExists) { groups.Add(new GroupViewModel()); }

标签: unit-testing c#-4.0 nunit uiculture


【解决方案1】:

你能给我举个例子吗?

类似的东西。您无需将代码直接耦合到 CultureInfo.InstalledUICulture,而是使用间接层来允许您假装当前的 UI 文化是您想要的任何东西。

我不知道你的类或你是如何创建服务的,但我假设了某种 DI 并为提供者(或服务或任何你想调用它的东西)使用了构造函数参数

// App code
public interface ICurrentCultureProvider {
    CultureInfo CurrentInstalledUICulture { get; }
}

public class CurrentCultureProvider : ICurrentCultureProvider {
    public CultureInfo CurrentInstalledUICulture => CultureInfo.InstalledUICulture;
}

public class SUT {
    private readonly ICurrentCultureProvider cultureProvider;

    public SUT(ICurrentCultureProvider cultureProvider) {
        this.cultureProvider = cultureProvider;
    }

    public object Method(??? vm) {
        var currentUICulture = cultureProvider.CurrentInstalledUICulture;
        var groups = new ObservableDictionary<string, IGroupViewModel>(vm => vm.Name.ToString(currentUICulture));
        var isGroupExists = groups.ContainsKey(GroupName.ToString(currentUICulture));

        if (!isGroupExists) {
            groups.Add(new GroupViewModel());
        }

        return groups;
    }
}

// Test code. Could make this return any culture by using a parameter.
public class GermanCultureProvider : ICurrentCultureProvider {
    public CultureInfo CurrentInstalledUICulture => new CultureInfo("de-DE");
}

[TestFixture]
public class Sample_Test {

    [Test]
    public void Demo() {
        var sut = new SUT(new GermanCultureProvider());
        var vm = new ???();
        var groups = sut.Method(vm);
        // Assert correct in German etc
    }
}

【讨论】:

  • 谢谢。它帮了我很多:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 2010-10-15
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多