繁体   English   中英

如何在C#单元测试方法中引用.runsettings文件值?

[英]How to reference .runsettings file values in C# unit test methods?

我将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文件?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM