【问题标题】:C# Unit Testing with TestInitialize/TestCleanup in base class在基类中使用 TestInitialize/TestCleanup 进行 C# 单元测试
【发布时间】:2015-09-04 03:42:08
【问题描述】:

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

  • 开始交易
  • 执行 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 
    }
}

【问题讨论】:

    标签: c# unit-testing


    【解决方案1】:

    看起来您正在使用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 继承到任何测试,并且 Intiialize 和 Cleanup 将在任何测试之前和之后执行。

    【讨论】:

    • 仅供参考:仅当我将 [TestClass][TestInitialize][TestCleanup] 添加到所有基类及其方法时,它才对我有用。
    • 一个常见的错误也是在基类和当前类中调用您的方法 Cleanup。这会阻止两个清理运行,并且只会运行继承类中的清理(因为基础清理被新的清理方法隐藏)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多