问题 MSTest中TestExecution类的目的是什么?


我找到了 TestExecution class,它暴露了一系列非常有用的事件。但是,除了MSDN的文档之外,我找不到对它的引用,并且文档没有提供任何关于它如何使用的提示,或者我如何在测试运行期间获得对实例的引用。

使用.NET Reflector看起来也没有帮助 - TestExecution 由另一个类实现, UnitTestExecution,这是内部的。我无法在任何Microsoft.VisualStudio.QualityTools。*库中找到任何其他类的引用,既不是进一步实现的形式,也不是任何其他类中的属性类型引用。

我如何获得这些活动的访问权限?


6684
2017-12-15 21:32


起源

看起来像一个抽象类,因此您可能必须从它派生并实现一些抽象方法/属性。 - Bernard
不一定......我认为框架使用抽象的可能性更大。由于它是一个公共类,并且由于UnitTestExecution不是,它似乎遵循暴露抽象的模式,而不是实现。通常,有一种方法可以获得对抽象实例的引用(与TestContext属性一样,其中TestContext也是一个抽象类),但我无法找到它。 - Daniel Schaffer
这似乎是“询问作者”最好的情况之一。 - Bernard


答案:


一个 TestExecution 实现自定义时,将为您提供实例 TestExtensionExecution。它提供了一个 初始化 方法,您可以覆盖该方法以订阅测试事件。

这通常是MSTest中自定义测试属性实现的一部分。

编辑 要创建自己的测试扩展,请从创建派生自的新属性开始 Microsoft.VisualStudio.TestTools.UnitTesting.TestClassExtensionAttribute,这是一个要求你提供的抽象类 TestExtensionExecution 通过 GetExtension() 方法。

将您的属性应用于您的某个测试方法,您应该能够在测试期间(在您的测试中)订阅这些事件 TestExtensionExecution 属性返回的实现)

请注意,您还必须实现一个 ITestMethodInvoker 你应该能够从中创建 TetMethodInvokerContext.TestMethodInfo 物业供应给 TestExtensionExecute.CreateTestMethodInvoker 方法。


10
2017-12-19 08:27



如何配置要使用的其中一个扩展? - Daniel Schaffer
我希望这些信息已经成为MSDN上MSTest文档的一部分。 - Tanveer Badar