TestContext名称在给定代码中如何相关?

时间:2018-05-24 12:01:12

标签: c# visual-studio unit-testing mstest

我正在使用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为null。该物业如何运作?仅当名称为TestContext时才有效。我对C#编程很天真。

1 个答案:

答案 0 :(得分:2)

您可能已经注意到,您自己并未指定TestContext财产,但不知何故,它会获得其价值。如何获得价值?测试框架分配它。它是如何找到财产的?它会查找名为TestContext的{​​{1}}类型的属性。因此,当您更改名称时 - 它无法再找到它并且无法分配值,因此它保持为空。

您可以在documentation中详细了解此课程。这个问题的相关部分是:

  

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