使用Visual Studio生成Test Unit类。然后注释,类初始化方法。在里面使用testContext参数添加你的属性。
在测试app启动时,测试基础架构确实调用了此方法。
//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都会被初始官方文件覆盖。它只有在用户有测试初始化方法时才会被覆盖,在那里进行的更改都会传递给测试。
//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作为集合呢?用户可以使用许多其他解决方案进行类广泛初始化。
答案 0 :(得分:13)
TestContext对于每个测试都是唯一的,因此在ClassInitialize中初始化它将不起作用。您只应将它用于TestInitialize,TestCleanup和TestMethod方法。
This post很好地解释了如何运行包含线程的一个类的测试。
话虽如此,我还没有找到TestContext的用途,但我是MSTest的新手。我同意MSDN文档令人困惑。将所有示例方法写入控制台或抛出消息框都不能代表可能性。
答案 1 :(得分:1)
我相信您必须保留testContext的副本,否则它将超出范围。
我补充说:
private TestContext _tc;
并添加到Initialize
tc = testContext;
当我从其中一个测试中查看tc时,它包含新添加的属性。
答案 2 :(得分:0)
TestContext用于从外部将信息传递到您的测试中。通过测试执行程序或.runsettings文件,使其一般数据以一种方式。