0

我将 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);
}

其中 context.Properties[] 引用了我的 .runsettings 文件中的键。

我不能简单地做的原因

[TestMethod]
public void BasicTest(TestContext context){
var basicFile = context.Properties["basic"].ToString();
OpenFile(basicFile);
}

是因为测试方法不能接受任何参数。那么,有什么方法可以在不使用 context.Properties 的情况下直接引用测试方法中的 .runsettings 文件?

4

1 回答 1

0

我刚刚从 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。

于 2017-11-20T13:57:07.150 回答