演练:使用配置文件定义数据源
本演练演示如何使用 app.config 文件中定义的数据源进行测试。 你将了解如何创建一个 app.config 文件,该文件定义 DataSourceAttribute 类可以使用的数据源。 本演练中介绍的任务包括:
创建 app.config 文件。
定义自定义配置部分。
定义连接字符串。
定义数据源。
使用 DataSourceAttribute 类访问数据源。
注意
DataSourceAttribute 目前仅在 .NET Framework 上受支持。
先决条件
若要完成本演练,需要:
Visual Studio Enterprise
Microsoft Access 或 Microsoft Excel,以提供至少一种测试方法的数据。
包含测试项目的 Visual Studio 解决方案。
将 app.config 文件添加到项目
如果测试项目已有 app.config 文件,请转到 定义自定义配置部分。
在 解决方案资源管理器中右键单击测试项目,然后选择“添加>新项。
“添加新项”窗口随即会打开。 如果未看到所有项模板,请选择 显示所有模板,然后选择项模板。
选择 应用程序配置文件 模板,然后单击 添加。
定义自定义配置部分
检查 app.config 文件。 它至少包含 XML 声明和根元素。
将自定义配置部分添加到 app.config 文件
app.config 的根元素应为 configuration 元素。 在 配置 元素中创建 configSections 元素。 configSections 应该是 app.config 文件中的第一个元素。
在 configSections 元素中,创建一个 section 元素。
在 节 元素中,添加一个名为
name
的属性,并为其赋值microsoft.visualstudio.testtools
。 添加另一个名为type
的属性,并为其赋值Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions
。
section 元素应类似于:
<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions" />
注意
程序集名称必须与所使用的版本匹配。
定义连接字符串
连接字符串定义了用于访问数据源的提供程序特定信息。 配置文件中定义的连接字符串在整个应用程序中提供可重复使用的数据提供者信息。 在本部分中,将创建两个连接字符串,这些连接字符串将由自定义配置节中定义的数据源使用。
谨慎
连接字符串可以包含敏感数据(例如密码)。 连接字符串以纯文本形式存储在源代码和已编译的程序集中。 限制对源代码和程序集的访问以保护此敏感信息。
定义连接字符串
configSections 元素后,创建 connectionStrings 元素。
在 connectionStrings 元素中,创建两个 add 元素。
在第一个 元素中添加 元素,为连接到 Microsoft Access 数据库创建以下属性和值:
属性 | 价值观 |
---|---|
name |
"MyJetConn" |
connectionString |
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" |
providerName |
"System.Data.OleDb" |
在第二个 中添加 元素,为连接 Microsoft Excel 电子表格创建以下属性和值:
属性 | 价值观 |
---|---|
name |
"MyExcelConn" |
connectionString |
"Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5" |
providerName |
"System.Data.Odbc" |
connectionStrings 元素应如下所示:
<connectionStrings>
<add name="MyJetConn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" providerName="System.Data.OleDb" />
<add name="MyExcelConn" connectionString="Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5" providerName="System.Data.Odbc" />
</connectionStrings>
定义数据源
数据源部分包含测试引擎用于从数据源检索数据的四个属性。
name
定义了 DataSourceAttribute 用于指定要使用哪个数据源的标识。connectionString
标识在上一“定义连接字符串”部分中创建的连接字符串。dataTableName
定义了保留要在测试中使用的数据的表格或工作表。dataAccessMethod
定义用于访问数据源中的数据值的技术。
在本部分中,你将定义要在单元测试中使用的两个数据源。
定义数据源
connectionStrings 元素后,创建 microsoft.visualstudio.testtools 元素。 本部分是在“定义自定义配置”部分中创建的。
在 microsoft.visualstudio.testtools 元素中,创建 dataSources 元素。
在 dataSources 元素中,创建两个 add 元素。
在第一个 添加 元素中,为 Microsoft Access 数据源创建以下属性和值:
属性 | 价值观 |
---|---|
name |
"MyJetDataSource" |
connectionString |
"MyJetConn" |
dataTableName |
"MyDataTable" |
dataAccessMethod |
"Sequential" |
在第二个 中添加 元素,为 Microsoft Excel 数据源中创建以下属性和值:
属性 | 价值观 |
---|---|
Name |
"MyExcelDataSource" |
connectionString |
"MyExcelConn" |
dataTableName |
"Sheet1$" |
dataAccessMethod |
"Sequential" |
microsoft.visualstudio.testtools 元素应如下所示:
<microsoft.visualstudio.testtools>
<dataSources>
<add name="MyJetDataSource" connectionString="MyJetConn" dataTableName="MyDataTable" dataAccessMethod="Sequential"/>
<add name="MyExcelDataSource" connectionString="MyExcelConn" dataTableName="Sheet1$" dataAccessMethod="Sequential"/>
</dataSources>
</microsoft.visualstudio.testtools>
最终 app.config 文件应如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions" />
</configSections>
<connectionStrings>
<add name="MyJetConn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" providerName="System.Data.OleDb" />
<add name="MyExcelConn" connectionString="Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5" providerName="System.Data.Odbc" />
</connectionStrings>
<microsoft.visualstudio.testtools>
<dataSources>
<add name="MyJetDataSource" connectionString="MyJetConn" dataTableName="MyDataTable" dataAccessMethod="Sequential"/>
<add name="MyExcelDataSource" connectionString="MyExcelConn" dataTableName="Sheet1$" dataAccessMethod="Sequential"/>
</dataSources>
</microsoft.visualstudio.testtools>
</configuration>
创建使用 app.config 中定义的数据源的单元测试
定义 app.config 文件后,你将创建一个单元测试,该测试使用 app.config 文件中定义的数据源中的数据。 在本部分中,我们将:
创建在 app.config 文件中找到的数据源。
在两种测试方法中使用数据源,以比较每个数据源中的值。
创建Microsoft Access 数据源
创建一个名为 Microsoft Access 数据库的 testdatasource.accdb。
在 testdatasource.accdb中创建表并将其命名为
MyDataTable
。在
MyDataTable
中使用Number
数据类型创建名为Arg1
和Arg2
的两个字段。向
MyDataTable
添加五个实体,分别具有以下Arg1
和Arg2
的值:(10,50)、(3,2)、(6,0)、(0,8)和(12312,1000)。保存并关闭数据库。
将连接字符串更改为指向数据库的位置。 更改
Data Source
的值以反映数据库的位置。
创建Microsoft Excel 数据源
创建名为 data.xlsx的 Microsoft Excel 电子表格。
如果 data.xlsx中尚不存在名为
Sheet1
的工作表,请创建该工作表。在
Sheet1
中创建两个列标题并将其命名为Val1
和Val2
。将五个实体添加到
Sheet1
,并分别为Val1
和Val2
设置以下值:(1,1)、(2,2)、(3,3)、(4,4)和(5,0)。保存并关闭电子表格。
将连接字符串更改为指向电子表格的位置。 更改
dbq
的值以反映电子表格的位置。
使用 app.config 数据源创建单元测试
向测试项目添加单元测试。
将单元测试的自动生成内容替换为以下代码:
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace TestProject1 { [TestClass] public class UnitTest1 { private TestContext context; public TestContext TestContext { get { return context; } set { context = value; } } [TestMethod()] [DeploymentItem("MyTestProject\\testdatasource.accdb")] [DataSource("MyJetDataSource")] public void MyTestMethod() { int a = Int32.Parse(context.DataRow["Arg1"].ToString()); int b = Int32.Parse(context.DataRow["Arg2"].ToString()); Assert.AreNotEqual(a, b, "A value was equal."); } [TestMethod()] [DeploymentItem("MyTestProject\\data.xlsx")] [DataSource("MyExcelDataSource")] public void MyTestMethod2() { Assert.AreEqual(context.DataRow["Val1"], context.DataRow["Val2"]); } } }
检查 DataSource 属性。 请注意 app.config 文件中的设置名称。
生成解决方案并运行 MyTestMethod 和 MyTestMethod2 测试。
重要
将数据源等项目部署到部署目录,以便测试能够访问这些资源。