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

在Visual Studio Team Foundation Server 2013中,我正在使用unit testing框架。 具体来说,我正在使用将从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 // Assert.IsTrue(true); //of course this is not what I really do } } 

输出将如下所示:

测试通过 – MyOnlyDataDrivenTestFromXML(数据行0)
测试通过 – MyOnlyDataDrivenTestFromXML(数据行1)
通过测试 – …
测试通过 – MyOnlyDataDrivenTestFromXML(数据行N)

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


其他信息,猜测

问题是,虽然您可以通过TestContext.TestNameTestContext获取测试名称,但您无法设置它。 此外,您不能(不应该)只是从TestContextinheritance并创建一个允许您这样做的。

我也尝试直接从TestContextProperties设置名称,但是没有成功:

 TestContext.Properties["TestName"] = testName; TestContext.Properties["FullyQualifiedTestClassName"] = testName; 

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

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

我想到的另一件事是,它可能会做一些通用编程,模板化的方法将在编译时评估所有适当的测试名称,但这似乎非常困难和矫枉过正。


这可行吗?


相关(但没有答案): MSTest数据驱动测试集来自DataSource的行的DisplayName

我觉得这样做比评论更好,而不是答案,但唉,我没有足够的声誉。

这里有一个类似的问题答案: Mstest名称而不是数据行与数据驱动测试

它们看起来像TestContext.WriteLine()来获取他们想要打印的值。