1.测试数据放在数据库中.
在测试方法的属性窗口中设置 connection string 和data table name
[TestMethod]
[Owner("Mark Michaelis")]
[TestProperty("TestCategory", "Developer"), DataSource("System.Data.SqlClient", "Data Source=.\\SQLEXPRESS;AttachDbFilename="myTestData.mdf";Integrated Security=True", "LogonInfoTest", DataAccessMethod.Sequential)]
public void ChangePasswordTest()
{
//得到测试数据
string userId = (string)TestContext.DataRow[(int)Column.UserId];
string password = (string)TestContext.DataRow[(int)Column.Password];
bool isValid = (bool)TestContext.DataRow[(int)Column.IsValid];
LogonInfo logonInfo = new LogonInfo(userId, "P@ssw0rd");
if (!isValid)
{
Exception exception = null;
try
{
logonInfo.ChangePassword( "P@ssw0rd", password);
}
catch (Exception tempException)
{
exception = tempException;
}
Assert.IsNotNull(exception, "The expected exception was not thrown.");
Assert.AreEqual<Type>( typeof(ArgumentException), exception.GetType(),"The exception type was unexpected.");
}
else
{
logonInfo.ChangePassword("P@ssw0rd", password);
Assert.AreEqual<string>(password, logonInfo.Password, "The password was not changed.");
}
}
2.测试数据方法Excel文件中
[TestMethod()]
[DeploymentItem("EmailData\\EmailData.xls")] //将excel文件部署到测试程序所在的目录,似乎不必要
[DataSource("System.Data.Odbc","Dsn=Excel Files;dbq=D:\\TestData.xls;defaultdir=.; driverid=790;maxbuffersize=2048;pagetimeout=5", "Sheet1$", DataAccessMethod.Sequential)]
public void MyFunctionTest()
{
//得到测试数据
string testData = TestContext.DataRow[0].ToString();
…
}
3.使用配置文件
测试工程的app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</configSections>
<connectionStrings>
<add name="MyJetConn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.mdb; Persist Security Info=False;" providerName="System.Data.OleDb" />
<add name="MyExcelConn" connectionString="Dsn=Excel Files;dbq=data.xls;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>
测试代码:
[TestMethod()]
[DeploymentItem("MyTestProject\\testdatasource.mdb")]
[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.xls")]
[DataSource("MyExcelDataSource")]
public void MyTestMethod2()
{
Assert.AreEqual(context.DataRow["Val1"], context.DataRow["Val2"]);
}
个人认为:DeploymentItem
参考
Strengthening Visual Studio Unit Tests(by John Robbins)
http://msdn.microsoft.com/msdnmag/issues/06/03/Bugslayer/
演练:使用 Visual Studio Team Test 进行单元测试
http://www.microsoft.com/china/msdn/library/langtool/vsts/vstsunittesting.mspx?mfr=true
演练:使用配置文件定义数据源
http://msdn2.microsoft.com/zh-cn/library/ms243192.aspx
DeploymentItemAttribute
http://msdn2.microsoft.com/zh-cn/library/ms245570.aspx