首页 > 解决方案 > MSTest:[ClassInitialize] 和 [ClassCleanup] 导致“未运行”

问题描述

2021-07-10 更新:已解决

旧版本的 Visual Studio 和 MSTest.Framework 很好地说明了问题所在,VS2019 和 MSTest 的最新版本组合(如下所列)只是在测试前放了一个感叹号,而没有说明问题所在。

实际问题是签名不正确。两种方法都必须是静态的,并且带有标记的方法[ClassInitialize]采用 TestContext 类型的参数。

    [ClassInitialize]
    public static void TestInitialize(TestContext _)
    {
        ...
    }

    [ClassCleanup]
    public static void TestCleanup()
    {
        ..
    }

原帖:

为了能够结合 PLC(工业实时控制)执行 MSTest,我需要在所有测试开始之前建立与 PLC 的连接,并在所有测试完成后断开和清理。这可以通过[AssemblyInitialize]在所有测试类[ClassInitialize]之前或每个单独的测试类之前使用 MSTests 属性来实现(是的,我知道使用这种构造不可能进行并行测试)。但是,这些属性会导致测试状态为“未运行”(蓝色感叹号)。因此测试由测试资源管理器发现但未执行。[TestInitialize]属性和工作已经够奇怪了,[TestCleanup]但是为每个测试建立和清理 PLC 连接太耗时了。

作为一种解决方法,我可以使用静态构造函数,但要清理连接,我需要一个 C# 中不存在的静态终结器。无论如何,我更喜欢纯代码而不是此类解决方法。

我将问题分解到最低限度:

    [TestClass]
    public class DebugTest
    {
        [ClassInitialize] 
        public void TestInitialize()
        {
            ...
        }

        [ClassCleanup] 
        public void TestCleanup()
        {
            ...
        }

        [TestMethod]
        public void Test1()
        {
            Assert.IsTrue(true);
        }

        [TestMethod]
        public void Test2()
        {
            Assert.IsFalse(false);
        }

    }

以下是相关版本信息:

奇怪的是,我在互联网上找不到类似的问题。有人有解决方案吗?

标签: mstest

解决方案


推荐阅读