如何在Visual Studio与C#中实现测试Fixture复用代码
在Visual Studio 2012的MS Test中实现类似pytest fixture的功能
在Visual Studio 2012内置的MS Test测试框架里,你可以用[TestInitialize]和[TestCleanup]属性实现和pytest function级fixture完全一致的效果——把每个测试重复的初始化、清理代码抽出来,让框架自动在每个测试方法前后执行。
具体改造步骤如下:
- 在测试类中定义一个类级别的
CheetahSPI字段,用来共享初始化后的实例 - 用
[TestInitialize]标记初始化方法,把重复的启动逻辑移到这里 - 用
[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
相关产品推荐
相关产品推荐

