而不是"数据行0","数据行1"等输出自定义名称

时间:2014-05-12 20:42:47

标签: c# unit-testing visual-studio-2012 tfs

在Visual Studio Team Foundation Server 2013中,我使用了单元测试框架。具体来说,我使用的数据驱动测试将从XML文件中读取。

我的问题的要点

以下是一些示例代码:

using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class DataDrivenTestingClass{
   public TestContext TestContext{get; set;}

   [TestMethod]
   [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "test.xml", "XMLTests", DataAccessMethod.Sequential)]
   public void MyOnlyDataDrivenTestFromXML(){
      var testName = TestContext.DataRow[0].ToString();
      //... blah blah blah other logic
      //<snip>
      Assert.IsTrue(true); //of course this is not what I really do
   }
}

输出将如下所示:

  

测试通过 - MyOnlyDataDrivenTestFromXML(数据行0)
  测试通过 - MyOnlyDataDrivenTestFromXML(数据行1)
  测试通过 - ...
  测试通过 - MyOnlyDataDrivenTestFromXML(数据行N)

显然,(Data Row i)不是很具描述性。 XML存储了我想要使用的名称(我可以使用其他任何东西,但已经在xml中使用它似乎很方便)。不过,我不确定这是可能的。


其他信息,推测

问题是,虽然您可以通过TestContextTestContext.TestName获取测试名称,但您无法设置它。此外,你不能(不应该)只是继承TestContext并制作一个允许你这样做的。

我还尝试直接从Properties的{​​{1}}设置名称,但没有成功:

TestContext

问题在于将测试输出到.trx文件,然后对其进行后处理。这是因为测试是在SQL Server支持的构建服务器上运行的。我没有输出测试日志。

如果所有其他方法都失败了,我相信这可以通过挂钩TFS Web Services API并编写一个查询测试结果并在那里进行编辑的服务来实现,但是我宁愿不去这条路线,如果有的话可能的。

我想到的另一件事是,有可能做一些通用编程,模板化方法将在编译时评估所有适当的测试名称,但这看起来既困难又过度。


这可行吗?


相关(但没有回答):MSTest data driven Test set DisplayName for Rows from DataSource

1 个答案:

答案 0 :(得分:3)

我觉得这样做的评论不仅仅是一个答案,而是一个答案,但是我没有足够的声誉。

答案中有一个类似的问题:Mstest name instead Data Row with Data-Driven testing

看起来他们会使用TestContext.WriteLine()来获取他们想要打印的值。