43

我一直在努力解决这个问题,希望它可以帮助别人。

在使用 MsTest 创建单元测试时,我发现我在每个测试中都重复了相同的代码,并发现了一些方便的属性(TestInitializeTestCleanupClassInitializeClassCleanup)。

假设,当您使用这些属性之一标记方法时,它应该自动执行(分别在每个测试之前、每个测试之后、所有测试之前和所有测试之后)。令人沮丧的是,这并没有发生,我的测试也失败了。TestMethod如果直接从带有属性标记的类中调用这些方法,则测试成功。很明显他们不是自己执行的。

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

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

那么为什么这没有执行呢?

4

3 回答 3

114

诀窍是制作这些方法public

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

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

于 2012-09-20T20:52:27.947 回答
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。

于 2013-05-21T00:59:37.547 回答
1

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

于 2016-12-25T21:55:16.597 回答