我在使用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。 谢谢!
有什么想法吗?
答案 0 :(得分:2)
当我尝试使用CSV输入文件进行数据驱动的测试时,我正在努力解决类似的问题。第一列的名称在其开始时有一些垃圾,即ID
而不是ID
。
原来这是一个编码问题。 CSV文件以UTF-8保存,在开头添加了byte order mark,显然使解析器感到困惑。一旦我以ANSI编码保存文件,它就按预期工作。
我知道这是一个老问题,但这些信息可能有助于其他人在此页面上结束。
答案 1 :(得分:1)
您是否尝试过通过属性窗口添加它?
TestMethod1
,然后按F4(属性)。 TestMethod
您已正确设置部署部分,这通常是最大的绊脚石。
您也不必将构建操作设置为“始终复制”,因为部署会为您执行此操作。如果您包含用于配置的.xml文件或图标/图像作为项目的一部分,则使用此选项。
更新1:
另请尝试tutorial on MSDN。
更新2:
尝试this post,涉及ProcMon
答案 2 :(得分:0)
我看到你说你曾尝试将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文件夹
中