VS团队测试:使用Excel作为数据源的.Net单元测试:适配器失败

LCJ*_*LCJ 5 .net c# unit-testing visual-studio-2010

我正在尝试使用Excel作为数据源进行单元测试.我收到以下异常.我们如何纠正它?

单元测试适配器无法连接到数据源或读取数据.有关解决此错误的详细信息,请参阅"数据驱动的单元测试疑难解答"


  [TestMethod]
  [Owner("Lijo ")]
  [TestProperty("TestCategory", "Developer"), 
      DataSource("Microsoft.ACE.OLEDB.12.0", 
     "Data Source=C:/Sheets/DataSheet.xlsx;Extended Properties=Excel 12.0;",
     "[Sheet1$]", 
     DataAccessMethod.Sequential)]
  public void ChangePasswordTest()
  {

     int a = Convert.ToInt32(TestContext.DataRow[0]); //(int)Column.UserId
     int b = Convert.ToInt32(TestContext.DataRow[1]);
     int expectedResult = Convert.ToInt32(TestContext.DataRow[2]);

     MyClass myObj = new MyClass(1, "P@ssw0rd");
     int actualResult = myObj.GetAdditionResult(a, b);
     Assert.AreEqual<int>(expectedResult, actualResult, "The addition result is incorrect.");

  }
Run Code Online (Sandbox Code Playgroud)

阅读:

  1. 单元测试错误 - 单元测试适配器无法连接到数据源或读取数据

  2. 数据驱动单元测试问题

  3. 如何为Visual Studio测试项目创建启动和清理脚本?

  4. MSTEST/Visual Studio 2008团队测试如何确定测试方法执行顺序?

  5. Visual Studio 2010 Ultimate - 数据生成计划为列设置不正确的数据类型

  6. 我应该如何对一个简单的CRUD类进行单元测试?

小智 5

我今天完成了同样的任务。经过一些头痛之后,我无需使用app.config就可以解决:

[TestMethod]
[DataSource("System.Data.OleDB",
  @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Sheets\DataSheet.xlsx; Extended Properties='Excel 12.0;HDR=yes';",
  "Sheet1$",
  DataAccessMethod.Sequential
)]       
public void ChangePasswordTest()
{
 //Arrange

 //Act

 //Assert

}
Run Code Online (Sandbox Code Playgroud)

如果将excel文件用作测试项目中的资源,则必须将文件的“复制到输出目录”属性设置为Copy alwaysCopy if newer。并将DeploymentItem属性添加到您的测试中:

[TestMethod]
[DataSource("System.Data.OleDB",
  @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=.\DataSheet.xlsx; Extended Properties='Excel 12.0;HDR=yes';",
  "Sheet1$",
  DataAccessMethod.Sequential
)]       
[DeploymentItem(".\DataSheet.xlsx")]
public void ChangePasswordTest()
{
 //Arrange

 //Act

 //Assert

}
Run Code Online (Sandbox Code Playgroud)

  • 为我工作,谢谢。因为我在测试项目中使用excel文件作为资源,所以必须将文件的“复制到输出目录”属性设置为“总是复制”或“如果更新则复制”。 (3认同)

LCJ*_*LCJ 4

我自己用不同的方式解决了这个问题。欢迎其他答案。

请参阅:演练:使用配置文件定义数据源 http://msdn.microsoft.com/en-us/library/ms243192.aspx

  [TestMethod]
  [DeploymentItem("C:/Sheets/DataSheet.xlsx")]
  [DataSource("MyExcelDataSource")]
  public void ChangePasswordTest()
  {

     int a = Convert.ToInt32(TestContext.DataRow[0]); //(int)Column.UserId
     int b = Convert.ToInt32(TestContext.DataRow[1]);
     int expectedResult = Convert.ToInt32(TestContext.DataRow[2]);

     MyClass myObj = new MyClass(1, "P@ssw0rd");
     int actualResult = myObj.GetAdditionResult(a, b);
     Assert.AreEqual<int>(expectedResult, actualResult, "The addition result is incorrect.");

  }
Run Code Online (Sandbox Code Playgroud)

应用程序配置

<configuration>


<configSections>

<section name="microsoft.visualstudio.testtools" 
 type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

 </configSections>



 <connectionStrings>

<add name="MyExcelConn" 
     connectionString="Dsn=Excel Files;dbq=C:/Sheets/DataSheet.xlsx;defaultdir=.; driverid=790;maxbuffersize=2048;pagetimeout=5" providerName="System.Data.Odbc" />

 </connectionStrings>


 <microsoft.visualstudio.testtools>


  <dataSources>

      <add name="MyExcelDataSource" 
      connectionString="MyExcelConn" 
      dataTableName="Sheet1$" 
      dataAccessMethod="Sequential"/>

  </dataSources>


</microsoft.visualstudio.testtools>

</configuration>
Run Code Online (Sandbox Code Playgroud)

对于 VS 2010,使用的 TestTools 版本为 Version=10.0.0.0