我正在使用Nunit在Selenium中进行单元测试(以防万一)。
对于这个单元测试,我有一些包含所有选项的不同语言翻译的库。每个库都有一个名称相同的类,其中包含大量名称相同的字符串,但内部包含不同的字符串。+我有一个配置文件,您可以在其中选择要使用哪种语言运行测试。是否有一种聪明的方式来加载所需的语言库,以便我可以对字符串使用相同的变量?
在JavaScript中,我可以使用require(string)。由于输入是字符串,因此我可以使用变量来更改使用的实际文件,但将变量命名为同一东西。
代替将其作为类文件,您可以使用json作为翻译后的字符串的存储空间
[{
"Reference": "Hello World",
"French": "Bonjour le monde",
"Japanese": "Harōwārudo"
}]
然后您可以创建DTO。
public class OptionsTranslation
{
public string Reference { get; set; }
public string French { get; set; }
public string Japanese { get; set; }
}
然后您将json反序列化为对象,并获取值
var options = JsonConvert.DeserializeObject<List<OptionsTranslation>>(File.ReadAllText(<jsonFilepath>));
var frenchOption = options.First(x=> x.Reference.Equals("Hello World").French;
希望这会有所帮助。
您可以使用反射根据配置文件中的值查找相应的程序集,然后重新创建库类的实例。像这样:
string typeString = "My.Assembly.Namesapce.MyClass, My.Assembly.Namesapce, Version=4.0.0.0, Culture=neutral, PublicKeyToken=84474dc3c6524430";
// Get a reference to the type.
Type theType = Type.GetType(typeString, true, false);
// Create an instance of that type.
MyClass theInstance = (MyClass)Activator.CreateInstance(theType);
在这种情况下,您将根据在配置文件中选择的语言来更改typeString
或者,似乎动态依赖注入将很好地解决您的问题。想法是,您注册了可以在您的情况下注入的多种类型的语言库。然后在运行时,可以根据设置的条件注入正确的库。
这是在.Net Core中实现此目标的良好指南:http://anthonygiretti.com/2019/01/31/implement-dynamic-dependency-injection-in-asp-net-core-2-2-example-with-multitenancy-scenario/