【发布时间】: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