And*_*dyG 10 c# tfs unit-testing visual-studio-2012
在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中使用它似乎很方便).不过,我不确定这是可能的.
问题是,虽然您可以从TestContextvia 获取测试名称TestContext.TestName,但您无法设置它.此外,你不能(不应该)简单地继承TestContext并制作一个允许你这样做的人.
我也试图直接从设定的名字Properties的TestContext,像这样,但没有成功:
TestContext.Properties["TestName"] = testName;
TestContext.Properties["FullyQualifiedTestClassName"] = testName;
什么是不可能的是将测试输出到.trx文件,然后进行后处理.这是因为测试是在SQL Server支持的构建服务器上运行的.我没有输出测试日志.
如果所有其他方法都失败了,我相信这可以通过挂钩到TFS Web服务API并编写一个查询测试结果并在那里进行编辑的服务来实现,但是如果可能的话,我宁愿不去这条路线.
我想到的另一件事是,有可能做一些通用编程,模板化的方法将在编译时评估所有适当的测试名称,但这似乎非常困难和矫枉过正.
相关(但没有答案):MSTest数据驱动测试集来自DataSource的行的DisplayName
小智 4
我觉得这作为评论比答案更有效,但可惜我没有足够的声誉。
这里有一个类似的问题和答案:Mstest名称而不是数据行与数据驱动的测试
看起来他们执行 TestContext.WriteLine() 来获取他们想要打印的值。