【问题标题】:Classes marked with TestInitialize and TestCleanup not executing标有 TestInitialize 和 TestCleanup 的类未执行
【发布时间】:2012-09-20 20:52:27
【问题描述】:

我一直在努力解决这个问题,希望它能对其他人有所帮助。

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

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

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

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

那为什么没有执行呢?

【问题讨论】:

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


    【解决方案1】:

    诀窍是让这些方法public:

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

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

    【讨论】:

    • @Stefan de Kok:难以置信,我忽略了它。感谢您的提示!
    • @stuartdotnet - 你真棒!!!我快疯了,我读了你的答案!!!
    【解决方案2】:

    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。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        • 1970-01-01
        相关资源
        最近更新 更多