mstest - 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);
}
}
以下是相关版本信息:
- .NET 5.0
- 所有项目都针对“任何 CPU”进行编译,包括测试项目
- Microsoft Visual Studio 专业版 2019:v16.9.4
- MSTest.TestAdapter:v2.2.5 MSTest.TestFramework:v2.2.5
- Microsoft.NET.Test.Sdk:v16.10.0
奇怪的是,我在互联网上找不到类似的问题。有人有解决方案吗?
解决方案
推荐阅读
- python - Python 用 Panda 解析 csv 中的字符串值
- postgresql - 使用检查选项 Postgresql
- c++ - netbeans 0xc00007b 上的 C++
- sed - 使用 sed 删除两个字符之间的行
- google-cloud-platform - 如何选择 Google Storage 存储分区作为 Cloud Run 触发器的特定资源?
- flutter - Flutter 调用存储值
- angular - Angular 组件导入 TypeScript 类导致开玩笑失败
- javascript - 怎么把图片放在屏幕中间
- python - 虽然我放了字母路径,但我仍然收到字母应该存在并且可读的错误
- c# - Linq 查询以迭代组并仅过滤选定类型