【问题标题】:Custom Attribute to initialize other sealed attribute自定义属性以初始化其他密封属性
【发布时间】:2017-08-25 16:23:16
【问题描述】:

是否可以通过其他(自定义)属性以某种方式初始化 sealed 属性?

原因很简单。我正在使用 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
}

where 属性MyDS 将在一处自动填充DataSource 的参数。我不能使用继承,因为DataSourceAttribute密封

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

【问题讨论】:

标签: c# unit-testing selenium


【解决方案1】:

想不出任何方法来做你所要求的,但为什么不将你的数据源设置添加到 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

【讨论】:

    猜你喜欢
    • 2013-10-11
    • 1970-01-01
    • 2019-05-16
    • 2011-09-09
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2020-09-01
    • 2010-11-15
    相关资源
    最近更新 更多