是否有可能以某种方式从其他(自定义)属性初始化密封属性?
原因很简单。我正在用 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
已密封。
那么,是否可以使用自定义属性避免对我的测试方法进行冗余属性消除?
答案 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的更多信息。