自定义属性,用于初始化其他密封属性

时间:2017-08-25 16:23:17

标签: c# unit-testing selenium

是否有可能以某种方式从其他(自定义)属性初始化密封属性?

原因很简单。我正在用 Selenium Grid 编写数据驱动的单元测试项目。我的目标是仅编写测试并将数据源用于控制当前经过测试的浏览器。 (我希望避免编写k*n个测试,其中n是测试,k是受支持的浏览器,其中每个测试都指定必需的WebDriver。)

这个解决方案非常适合我,但需要声明所有类似的方法:

[TestMethod, DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\BrowserSelector.csv", "BrowserSelector#csv", DataAccessMethod.Sequential), DeploymentItem("BrowserSelector.csv")]
public void TestMethod()
{
    // implementation
}

如您所见,DataSource的参数非常长。我可以在多行上写它,这会提高可读性,但它并不能解决我的主要问题:我期待大量测试(很容易 500 + - 这是一个大型商业应用程序),我想避免不必要和冗余属性定义

我的想法是这样的:

[TestMethod, MyDS, MyDep]
public void TestMethod()
{
    // implementation
}

其中,属性MyDS将自动填充DataSource的参数并放在一个位置。我无法使用继承,因为DataSourceAttribute 已密封

那么,是否可以使用自定义属性避免对我的测试方法进行冗余属性消除?

1 个答案:

答案 0 :(得分:2)

想不出有什么方法可以做你要问的,但为什么不把你的数据源设置添加到app.config:

<microsoft.visualstudio.testtools>  
    <dataSources>  
        <add name="MyDataSource" connectionString="Provider=Microsoft.VisualStudio.TestTools.DataSource.CSV;DataSource=|DataDirectory|\\BrowserSelector.csv" dataTableName="BrowserSelector#csv" dataAccessMethod="Sequential"/>  
    </dataSources>  
</microsoft.visualstudio.testtools>  

然后使用this constructor设置属性?

[TestMethod, DataSource("MyDataSource")]
public void TestMethod()
{
    // implementation
}

这应该可以节省一些打字。

Walkthrough: Using a Configuration File to Define a Data Source的更多信息。