代码之家  ›  专栏  ›  技术社区  ›  user182669

TestContext.Properties是否可用?

  •  18
  • user182669  · 技术社区  · 14 年前

    使用Visual Studio生成测试单元类。然后在中注释,类初始化方法。在其中,使用testContext参数添加属性。

    在测试应用程序启动时,测试基础结构确实会调用此方法。

    //Use ClassInitialize to run code before running the first test in the class
    [ClassInitialize()]
    public static void MyClassInitialize(TestContext testContext)
    {
        /*
         * Any user defined testContext.Properties
         * added here will be erased after this method exits
         */
       testContext.Properties.Add("key", 1 ) ; // place the break point here
    }
    

    离开MyClassInitialize后,用户添加的任何属性都将丢失。只剩下10个“官”了。

    //Use TestInitialize to run code before running each test
    [TestInitialize()]public void MyTestInitialize(){ 
         this.TestContext.Properties.Add("this is preserved",1) ;
    }
    

    这实际上意味着TestContext.Properties对用户来说“大部分”是只读的。这在MSDN中没有明确的记录。

    在我看来,这是非常混乱的设计+实现。为什么要将TestContext.Properties作为一个集合呢?用户可以执行许多其他的解决方案来进行类范围的初始化。

    3 回复  |  直到 8 年前
        1
  •  13
  •   Maggie    14 年前

    TestContext对于每个测试都是唯一的,因此在ClassInitialize中初始化它将不起作用。您应该只将它用于TestInitialize、TestCleanup和TestMethod方法。

    This post 很好地解释了一个类中的测试是如何运行的,包括线程。

    这就是说,我还没有找到TestContext的用途,但我是MSTest的新手。我同意MSDN文档令人困惑。让所有的示例方法写入控制台或抛出一个消息框并不能表示这种可能性。

        2
  •  1
  •   Cheddar    14 年前

    我相信您必须保存testContext的副本,否则它将退出作用域。

    我补充道:

    private TestContext _tc;
    

    tc = testContext;
    

    当我从一个测试中查看tc时,它包含新添加的属性。

        3
  •  0
  •   William Wallace    7 年前

    TestContext用于从外部向测试传递信息。通过测试执行器或.runsettings文件,因此其数据通常是单向的。