数据驱动的MSTest:DataRow始终为空

我在使用Visual Studio数据驱动测试时遇到问题。 我试图将其解构为最简单的例子。 我正在使用Visual Studio 2012.我创建了一个新的unit testing项目。 我正在引用系统数据。

我的代码如下所示:

namespace UnitTestProject1 { [TestClass] public class UnitTest1 { [DeploymentItem(@"OrderService.csv")] [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "OrderService.csv", "OrderService#csv", DataAccessMethod.Sequential)] [TestMethod] public void TestMethod1() { try { Debug.WriteLine(TestContext.DataRow["ID"]); } catch (Exception ex) { Assert.Fail(); } } public TestContext TestContext { get; set; } } } 

我有一个非常小的csv文件,我已将“构建选项”设置为“内容”和“始终复制”。 我在解决方案中添加了.testsettings文件,并设置了enable deployment,并添加了csv文件。

我有没有|DataDirectory|尝试过这个 ,有/没有指定完整路径(与Environment.CurrentDirectory相同的路径)。 为了以防万一,我尝试了“../”和“../../”的变体。 现在,csv位于项目根级别,与.cs测试代码文件相同。

我尝试过使用xml和csv的变体。

TestContext不为null,但DataRow始终为null。

尽管有很多摆弄它,我仍然没有得到这个工作。 我不确定我做错了什么。

mstest是否在任何地方创建了一个日志,告诉我它是否找不到csv文件,或者哪些特定错误可能导致DataRow无法填充?

我试过以下csv文件:

ID

1

2

3

4

身份证,无论如何

1,0

2,1

3,2

4,3

到目前为止,没有骰子。

我正在使用ReSharper,它可能会以某种方式干扰吗?

更新我现在主要工作! 我可以使用XML,但是当我使用CSV时,我的列名为ID,它返回为ID

不知道为什么。 我当然检查了实际文件,并没有出现奇怪的字符。

对于任何有类似问题的人,我关闭了Just My Code并启用了Net Framework源步骤等,以便我可以获得更详细的调试信息。 这让我可以确定ReSharper给我带来了问题。 我禁用了resharper并修改了我的属性,如下所示:

 [DeploymentItem("UnitTestProject1\\OrderService.csv")] [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\bin\\Debug\\OrderService.csv", "OrderService#csv", DataAccessMethod.Sequential)] 

它起作用(除非另有说明)。 我仍然怀疑我的路径中的“bin \ debug”,但我很高兴我的DataRow不再为空。 谢谢!

有任何想法吗?

当我尝试使用CSV输入文件进行数据驱动的测试时,我正在努力解决类似的问题。 第一列的名称在开始时有一些垃圾,即ID而不是ID

原来这是一个编码问题。 CSV文件以UTF-8保存,在开头添加了一个字节顺序标记 ,显然使解析器混乱。 一旦我以ANSI编码保存文件,它就按预期工作。

我知道这是一个老问题,但这些信息可能会帮助其他人在此页面上结束。

您是否尝试通过属性窗口添加它?

  • 转到测试菜单 – > Windows – >测试视图 – >测试将加载。
  • 单击测试以更改即TestMethod1并按F4(属性)。
  • 查找“数据源”并单击其旁边的省略号
  • 它将引导您完成一个向TestMethod正确设置属性的向导

您已正确设置部署部分,这通常是一个很大的障碍。

您也不必将构建操作设置为“始终复制”,因为部署会为您执行此操作。 如果您包含用于配置的.xml文件或图标/图像作为项目的一部分,则使用此选项。

更新1:

也可以在MSDN上试用本教程 。

更新2:

试试这篇涉及ProcMon的post

我看到你说你尝试将CS​​V本身放入testsettings文件中,但是你试过放入目录吗?

    

然后你的DataSource行看起来像这样: [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\YOURCSV.csv", "YOURCSV#csv", DataAccessMethod.Sequential)]

如果以这种方式执行,则无需指定DeploymentItem行。

我们的文件夹结构如下所示:Trunk \ Test \ Test \ Data

我们包括:部署中的Test \ Data

然后我们通过| DataDirectory | \访问Te​​st \ Data

所有CSV都位于\ Data文件夹中