5

这是我的场景,我想进行数据驱动的单元测试,并且为了独立于环境,我想将数据文件嵌入到我的程序集中。我如何在单元测试的 DataSourceAttribute 中引用呢?

我正在尝试使用 Microsoft Jet OleDB Provider 访问 Excel 2003 文件。当文件位于硬盘驱动器中时,单元测试工作正常,但当我尝试访问嵌入式程序集文件时却不行。这是我的例子:

原来的

[DeploymentItem("IHRM.Infrastructure.EFRepositories.Tests\DataDriven.xls"), DataSource("System.Data.OleDb", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\DataDriven.xls;扩展属性=\"Excel 8.0\""、"Sheet1$"、DataAccessMethod.Sequential)、TestMethod]

建议

[DataSource("System.Data.OleDb", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= "这里放什么" ;Extended Properties=\"Excel 8.0\"", "Sheet1$", DataAccessMethod. Sequential), DeploymentItem("IHRM.Infrastructure.EFRepositories.Tests\DataDriven.xls"), TestMethod]

4

1 回答 1

2

我怀疑 JET OLEDB 是否支持基于嵌入式资源连接到数据库。我看到两种解决方法:

1.提取资源

在测试的ClassInitialize中,您可以将程序集资源提取到已知位置。请参考您的 JET 连接字符串中的这个已知位置。在测试的ClassCleanup中再次清理提取的文件。

2.编写自己的数据源

也许可以编写自己的DbProviderFactory支持访问嵌入式 excel 文件。为了让 mstest 可以发现这样的工厂,您必须使用DbProviderFactories注册您的工厂

要查看 mstest 如何在内部处理数据源,请打开Microsoft.VisualStudio.QualityTools.Common.dll带有反射器的程序集并通过 dissassemble 开始跟踪Microsoft.VisualStudio.TestTools.Utility.TestDataConnection.Create

于 2009-12-22T13:35:41.957 回答