标有TestInitialize和TestCleanup的类未执行

时间:2012-09-20 20:52:28

标签: c# mstest vs-unit-testing-framework

我一直在努力争取这个,希望它能帮助别人。

在使用MsTest创建单元测试时,我发现我在每个测试中重复相同的代码,并找到了几个方便的属性(TestInitializeTestCleanupClassInitialize和{{ 1}})。

据推测,当您使用这些属性之一标记方法时,它应该自动执行(在每次测试之前,在每次测试之后,在所有测试之前,以及在所有测试之后)。令人沮丧的是,这没有发生,我的测试失败了。如果从标有ClassCleanup属性的类中直接调用这些方法,则测试成功。显然他们并没有自己执行。

以下是我使用的一些示例代码:

TestMethod

那为什么不执行?

3 个答案:

答案 0 :(得分:96)

诀窍是制作这些方法public

[TestInitialize()]
public void Setup()
{
    _factory = new Factory();
    _factory.Start();
}

当它们private时,它们不会执行。

答案 1 :(得分:10)

  

TestInitialize和TestCleanup在所有测试之前和之后运行,而不是在每个测试之前和之后运行。

这是错误的,请参阅此链接: http://social.msdn.microsoft.com/Forums/en-US/vststest/thread/85fb6549-cbaa-4dbf-bc3c-ddf1e4651bcf

另见MSDN

http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.classinitializeattribute.aspx

示例代码显示了如何使用TestInitialize,ClassInitialize和AssemblyInitialize。

答案 2 :(得分:1)

我也遇到了问题 - 由于我对如何调用方法的误解 - 解决了这个问题:让你的测试继承自包含TestInitialize和TestCleanup方法的类。