我正在使用Microsoft的WinAppDriver与Visual Studio 2015单元测试结合使用,以自动测试Windows应用程序。这些测试使用 VSTest 从命令行运行.exe因为我可以将 .runsettings 文件作为参数传递,以指定将来可能必须更改的某些测试设置。我希望能够直接从我的测试方法引用 .runsettings 文件,而无需在 Setup 方法的代码开头创建一堆全局变量。虽然我正在使用多个类,但我或多或少是这样做的:
protected static string basicFile;
[ClassInitialize]
public static void Setup(TestContext context)
{
var basicFile = context.Properties["basic"].ToString();
}
[TestMethod]
public void BasicTest(){
OpenFile(basicFile);
}
其中上下文。属性[]引用我的.runsettings文件中的键。
我不能简单地做的原因
[TestMethod]
public void BasicTest(TestContext context){
var basicFile = context.Properties["basic"].ToString();
OpenFile(basicFile);
}
这是因为测试方法不能接受任何参数。那么,有什么方法可以在不使用上下文的情况下直接在测试方法中引用 .runsettings 文件。性能?
我刚刚从 Java 切换到 C# 项目,在我们的测试自动化项目中提供 .runsettings 也让我很难过。我还面临着通过几个类传递 TestContext 参数的问题。所以,我的解决方案可能不是那么准确,但它奏效了:
[TestClass]
public class Operations : TestBase
{
public void CreateRelationship()
{
// Add test logic here
}
}
测试基类:
[TestClass]
public abstract class TestBase
{
[AssemblyInitialize]
public static void ContextInitialize(TestContext context)
{
DriverUtils.Initialize(context);
}
}
而DriverUtils反过来:
public static class DriverUtils
{
private static IWebDriver driver;
private static TestContext testContext;
private static string testEnvironment = string.Empty;
public static void Initialize(TestContext context)
{
testContext = context;
testEnvironment = Convert.ToString(testContext.Properties["TestEnvironmentUrl"]);
}
}
.runsettings 文件看起来与示例中完全相同,但我将"TestEnvironmentUrl"参数留空。然后,我将 .runsettings 文件添加到 TFS 工件中,后来在 TFS 发布配置中在"运行功能 UI 测试"部分添加了该文件的路径。然后我能够用真实的服务器URL覆盖"TestEnvironmentUrl"。仍然没有找到[AssemblyInitialize]的实现,但我想它可以将测试上下文从子测试类传递到父TestBase。