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

时间:2012-12-17 22:20:24

标签: c# visual-studio mstest vs-unit-testing-framework

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

我的代码如下所示:

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始终为。

尽管有很多摆弄它,但我还没有把这个用到工作中。我不确定我做错了什么。

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

我尝试过以下csv文件:

ID

1

2

3

4

ID,无论

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不再为null。 谢谢!

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

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

原来这是一个编码问题。 CSV文件以UTF-8保存,在开头添加了byte order mark,显然使解析器感到困惑。一旦我以ANSI编码保存文件,它就按预期工作。

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

答案 1 :(得分:1)

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

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

您已正确设置部署部分,这通常是最大的绊脚石。

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

更新1:

另请尝试tutorial on MSDN

更新2:

尝试this post,涉及ProcMon

答案 2 :(得分:0)

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

<Deployment>
 <DeploymentItem filename="Test\Data\" />
</Deployment>

然后您的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文件夹