Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TestContext.Properties可用吗?_C#_Unit Testing_Properties - Fatal编程技术网

C# TestContext.Properties可用吗?

C# TestContext.Properties可用吗?,c#,unit-testing,properties,C#,Unit Testing,Properties,使用VisualStudio生成测试单元类。然后在类初始化方法中进行注释。在其中,使用testContext参数添加属性 在测试应用程序启动时,测试基础设施确实会调用此方法 //Use ClassInitialize to run code before running the first test in the class [ClassInitialize()] public static void MyClassInitialize(TestContext testContext) {

使用VisualStudio生成测试单元类。然后在类初始化方法中进行注释。在其中,使用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个“官方”的了

实际上,每次调用每个测试方法之前,TestContext都会被重写,使用inital office。只有当用户有测试初始化方法时,它才被覆盖,在那里所做的更改将传递给测试

//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作为一个集合呢?用户可以做许多其他的解决方案来进行类范围的初始化。

我认为您必须保留testContext的副本,否则它将退出范围

我补充说:

private TestContext _tc;
并添加到初始化中

tc = testContext;

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

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

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


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

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

我甚至从未理解实际使用它的测试上下文的目的。本文中解释的目的在Visual Studio生成的测试单元类的上下文中不起作用。一个非常明显的原因是,我最初的帖子中的初始化方法是静态的。由Visual Studio生成。同意,但。。。我要说的是,(更糟糕的)实现是令人困惑的,因为(更糟糕的)它基于一个令人困惑的设计。结果就是这个bug,它被作为一个“特性”出售。我不知道两年前的情况,但是这种在TestInitialize中添加属性的方法不起作用。引发异常,并显示消息“已添加具有相同密钥的项”。因此,ClassInitialize会传递一个完全不同的TestContext,但测试本身都会获得相同的TestContext。。。