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

Dan*_*rgo 4 c# unit-testing

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

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

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

strait forward方法是在父类中编写TestInitialize/TestCleanup,但这不适用于此测试框架.

工作围绕这是使用部分类.在我的情况下,这种方法似乎是可行的,因为我的测试类主要是无状态的.事件不是理想的解决方案,它至少为我节省了几个复制/粘贴操作.

谁知道更好的方法呢?

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

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

SalesTest.cs文件:

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

    [TestCleanup]
    public void Cleanup()
    {
        //rollback transaction
    }
}
Run Code Online (Sandbox Code Playgroud)

SalesTest.Order文件:

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

ven*_*mit 13

看起来你正在使用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
        }
    }
Run Code Online (Sandbox Code Playgroud)

这将工作正常,我可以继承BaseTest任何测试,并且Intiailize和Cleanup将在任何测试之前和之后执行.