数据驱动的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
我看到你说你尝试将CSV本身放入testsettings文件中,但是你试过放入目录吗?
然后你的DataSource行看起来像这样: [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\YOURCSV.csv", "YOURCSV#csv", DataAccessMethod.Sequential)]
如果以这种方式执行,则无需指定DeploymentItem行。
我们的文件夹结构如下所示:Trunk \ Test \ Test \ Data
我们包括:部署中的Test \ Data
然后我们通过| DataDirectory | \访问Test \ Data
所有CSV都位于\ Data文件夹中