首页 > 解决方案 > TestContext 名称如何与给定代码相关?

问题描述

我正在使用 MicrosoftTestTools。我有一个包含 [TestMethod] 和 [ClassInitialize] 的 A 类。

[ClassInitialize]
public static void ClassInitialize(TestContext context)
{
    Setup(context);
}

设置的定义存在于 B 类(A 类的基类)中。

   public static void Setup(TestContext context)
    {
something
    }

[TestCleanUp] 存在于 B 类中。

[TestCleanup]
public void TestCleanUp()
{    
        if (TestContext.CurrentTestOutcome == UnitTestOutcome.Failed){}

}

为了在 TestCleanUp 方法中获取 TestContext,我在 B 类中创建了如下所示的属性。

public TestContext TestContext { get; set; }

它工作得很好。但是当我改变声明时,

public `TestContext CurrentContext{ get; set; }`

所以功能就像

[TestCleanup]
public void TestCleanUp()
{ 
if (CurrentContext.CurrentTestOutcome == UnitTestOutcome.Failed){}
}

CurrentContext 为空。该物业在这里如何运作?这仅在名称为 TestContext 时有效。我对 C# 编程很天真。

标签: c#visual-studiounit-testingmstest

解决方案


您可能已经注意到您自己并没有分配TestContext属性,但它以某种方式获得了它的价值。它如何获得价值?测试框架分配它。它如何找到该属性?它查找名为TestContexttype的属性TestContext。因此,当您更改名称时 - 它无法再找到它并且无法分配值,因此它保持为空。

您可以在文档中阅读有关此类的更多信息。这个问题的相关部分是:

运行单元测试时,如果包含单元测试方法的测试类定义了 TestContext 属性,则会自动为您提供 TestContext 类型的具体实例。


推荐阅读