【问题标题】:Data Driven MSTest: DataRow is always null数据驱动 MSTest:DataRow 始终为空
【发布时间】:2012-12-17 22:20:24
【问题描述】:

我在使用 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 文件,并设置启用部署,并添加了 csv 文件。

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

我尝试了 xml 和 csv 的变体。

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

尽管做了很多摆弄,但我还没有让它工作。我不确定我做错了什么。

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

我尝试了以下 csv 文件:

身份证

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

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    我今天在尝试使数据驱动测试与 CSV 输入文件一起工作时遇到了类似的问题。第一列的名称在开头有一些垃圾,即ID 而不仅仅是ID

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

    我知道这是一个老问题,但此信息可能会帮助其他人最终访问此页面。

    【讨论】:

    【解决方案2】:

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

    • 进入测试菜单 -> 窗口 -> 测试视图 -> 将加载测试。
    • 单击要更改的测试,即TestMethod1,然后按 F4(属性)。
    • 查找“数据源”并单击其旁边的省略号
    • 它将引导您完成为TestMethod 正确设置属性的向导

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

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

    更新 1:

    也试试这个tutorial on MSDN

    更新 2:

    试试this post,涉及ProcMon

    【讨论】:

    • 感谢您的回复。我正在使用 Visual Studio 2012,它似乎没有“测试视图”选项。只有“测试资源管理器”似乎没有为我提供数据源属性。 2012 年是否有其他方法可以导航到它?
    • 查看链接,看看是否有帮助。
    • 附加信息:我已移动目录(以检查权限问题)。我在 C:\TestMe 中找到了具有广泛开放权限的解决方案。 csv 的当前路径是 C:\TestMe\UnitTestProject1\bin\Debug\B2BOrderService.csv,我已经验证它在此处被正确复制。我没有发现教程链接有帮助,但感谢您尝试帮助我完成此任务。
    【解决方案3】:

    我看到您说您尝试将 CSV 本身放入 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 文件夹中

    【讨论】:

      猜你喜欢
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 2017-05-07
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多