在基类中使用 TestInitialize/TestCleanup 进行 C# 单元测试

标签 c# unit-testing

我正在测试一个模块,其中每个测试类共享相同的行为:

  • 开始交易
  • 执行 SQL 查询
  • 回滚事务

我决定分别使用TestInitialize和TestCleanup来执行事务的Begin和Rollback。

直截了当的方法是在父类中编写 TestInitialize/TestCleanup,但这不适用于此测试框架。

为此解决方法是使用部分类。这种方法在我的案例中似乎可行,因为我的测试类主要是无状态的。事件不是理想的解决方案,它至少为我节省了一些复制/粘贴操作。

有人知道更好的方法吗?

这是部分类解决方案的示例:

在我的例子中,我分别测试了每个模块,对于这个例子,我将使用 Sales 模块:

SalesTest.cs 文件:

[TestClass]
public partial class SalesTest
{
    [TestInitialize]
    public void Setup()
    {
        //begin transaction
    }

    [TestCleanup]
    public void Cleanup()
    {
        //rollback transaction
    }
}

SalesTest.Order 文件:

public partial class SalesTest
{
    [TestMethod]
    public void SaveOrder_OnlyRequiredValuesFilled_SuccessfullySaved()
    {
        //Run some SQL queries 
    }
}

最佳答案

看起来您正在使用 Microsoft.VisualStudio.TestTools.UnitTesting 框架。我没有发现使用基类进行清理和初始化有任何问题。

例如

   [TestClass]
    public class TestDemo : BaseTests
    {
        [TestMethod]
        public void SaveOrder_OnlyRequiredValuesFilled_SuccessfullySaved()
        {
            //Run some SQL queries 
        }

    }

    [TestClass]
    public abstract class BaseTests
    {
        [TestInitialize]
        public void Setup()
        {
            Console.WriteLine("Setup executed.");
            //begin transaction
        }

        [TestCleanup]
        public void Cleanup()
        {
            Console.WriteLine("Cleanup executed.");
            //rollback transaction
        }
    }

这会很好地工作,我可以将 BaseTest 继承到任何测试,并且 Intiailize 和 Cleanup 将在任何测试之前和之后执行。

关于在基类中使用 TestInitialize/TestCleanup 进行 C# 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32383023/

相关文章:

C#:具有服务层、接口(interface)和模拟的文件夹结构?

c# - 如何删除未选择的 TreeView 节点

c# - 测试抽象类的具体方法

c# - 如何模拟/单元测试 HTTP 客户端 - restease

c# - Serilog 未记录到 SQL Server

c# - PostAsJsonAsync 不使用匿名类型从 Windows 服务调用 webapi 服务,有什么明显的错误吗?

c# - 服务器上发生检测文档重新加载

unit-testing - Windows Store 应用程序的单元测试库中选择的模拟框架是什么?

c# - 使用 Moq 检查传递回 mock 的对象的属性

unit-testing - 在 Golang 中测试接受不返回值的回调函数的方法