在基类

时间:2015-09-03 18:32:27

标签: c# unit-testing

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

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

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

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

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

任何人都知道更好的方法吗?

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

在我的情况下,我单独测试每个模块,对于这个例子,我将使用销售模块:

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 
    }
}

1 个答案:

答案 0 :(得分:10)

您似乎正在使用Microsoft.VisualStudio.TestTools.UnitTesting框架。我没有看到使用基类进行清理和初始化的任何问题。

E.g。

   [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将在任何测试之前和之后执行。