You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Visual Studio与C#中实现测试Fixture复用代码

在Visual Studio 2012的MS Test中实现类似pytest fixture的功能

在Visual Studio 2012内置的MS Test测试框架里,你可以用[TestInitialize]和[TestCleanup]属性实现和pytest function级fixture完全一致的效果——把每个测试重复的初始化、清理代码抽出来,让框架自动在每个测试方法前后执行。

具体改造步骤如下:

  1. 在测试类中定义一个类级别的CheetahSPI字段,用来共享初始化后的实例
  2. 用[TestInitialize]标记初始化方法,把重复的启动逻辑移到这里
  3. 用[TestCleanup]标记清理方法,把关闭端口的逻辑移到这里

改造后的代码示例:

namespace CheetahTestSuite
{
    [TestClass]
    public class CheetahTest
    {
        // 类级别字段,供所有测试方法使用
        private CheetahSPI _spi;

        // 每个TestMethod执行前自动运行
        [TestInitialize]
        public void Setup()
        {
            _spi = new CheetahSPI();
            string found_devices = _spi.ListDevices("not used");
            // 可在此添加设备查找成功的断言,比如确认找到目标设备
        }

        // 每个TestMethod执行后自动运行
        [TestCleanup]
        public void Teardown()
        {
            string close_success = _spi.ClosePort();
            Assert.AreEqual(close_success, "0,OK");
        }

        [TestMethod]
        public void TestOpenPort()
        {
            // 仅保留测试OpenPort的核心逻辑,无需重复初始化和清理
            ...
        }

        [TestMethod]
        public void TestConfigureSPIPort()
        {
            // 仅保留测试配置SPI端口的核心逻辑
            ....
        }
    }
}

补充说明

  • 如果需要所有测试方法共享同一个SPI实例(类级别的fixture),可以改用[ClassInitialize]和[ClassCleanup]属性,但[ClassInitialize]标记的方法必须是静态方法,且参数需包含TestContext类型。这种场景要注意多线程测试的线程安全问题,一般不建议在需要独立测试环境的场景使用。
  • 这些属性是MS Test框架的原生特性,VS2012完全支持,无需额外安装插件。

内容的提问来源于stack exchange,提问作者philbot999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:47:43