更新 2021-07-10: 已解决
旧版本的Visual Studio和MSTest.Framework可以很好地说明问题,但VS2019和MSTest的最新版本组合(如下所列)只在测试前加了一个感叹号,并没有说明问题所在。
实际问题是签名不正确。这两个方法都必须是静态的,并且用 [ClassInitialize]
标记的方法需要带有 TestContext 类型的参数。
[ClassInitialize]
public static void TestInitialize(TestContext _)
{
...
}
[ClassCleanup]
public static void TestCleanup()
{
..
}
为了能够与PLC(工业实时控制)结合使用MSTests,我需要在所有测试开始之前建立与PLC的连接,并在所有测试完成后断开连接并进行清理。这可以通过MSTests属性[AssemblyInitialize]
在所有测试类之前或[ClassInitialize]
在每个单独测试类之前实现(是的,我知道这种构造不可能进行并行测试)。然而,这些属性会导致测试状态显示“未运行”(蓝色感叹号)。因此,测试被发现但未执行。令人奇怪的是,[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);
}
}
以下是相关版本信息:
- .NET 5.0
- 所有项目都编译为“Any CPU”,包括测试项目
- Microsoft Visual Studio Professional 2019: v16.9.4
- MSTest.TestAdapter: v2.2.5 MSTest.TestFramework: v2.2.5
- Microsoft.NET.Test.Sdk: v16.10.0
奇怪的是我在互联网上找不到类似的问题。有人有解决方案吗?