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

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


B类(A类的基类)中提供了安装程序的定义。

   public static void Setup(TestContext context)
    {
something
    }


B类中存在[TestCleanUp]。

[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#编程很幼稚。

最佳答案

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

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


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

关于c# - TestContext名称在给定代码中如何相关?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50508887/

10-13 09:33