在多个单元测试类之间共享DB设置数据

时间:2016-04-28 11:34:06

标签: c# unit-testing mstest

我不确定真正的单元测试是否应该严格地与​​外部系统(如数据库)进行交互,但我的确如此 - 我的设置代码的想法确保数据库处于某种状态,然后我的单元测试期望来自被调用的方法;我需要检查数据库访问代码是否正确。

我想在多个测试类中使用相同的DB测试数据,而不是将其复制粘贴到每个类中。 [TestInitialize]我想知道如何做到最好。选项似乎包括:

  1. 将所有内容全部放在外部.sql脚本中并运行此
  2. 某种带静态方法的助手类
  3. 我更希望更新数据库的代码是我的C#代码的一部分,但是想知道MSTest项目是否有更典型的方式来处理这个问题?

1 个答案:

答案 0 :(得分:2)

您可以使用继承在多个单元测试类之间共享设置数据。

您可以创建一个基础测试类,让其他类继承它(包括将为每个测试调用的[TestInitialize])。

看看这篇文章Structuring Unit Tests,它展示了如何将测试结构用于具有所有测试的通用设置代码的测试

使用上面的链接作为参考,测试结构可能看起来像......

[TestClass]
public partial class DbTests {
    protected DbContext db;    

    [TestInitialize]
    public virtual void Init() { 
        //Virtual so it could be overridden in derived classes if needed.
        //...check the DB-access code is doing the right thing. 
    }

    [TestClass]
    public class Test1 : DbTests {
        [TestMethod]
        public void Should_Do_Some_Test(){...}

        [TestMethod]
        public void Should_Do_Some_Db_Test(){...}
    }

    [TestClass]
    public class Test2 : DbTests {
        [TestMethod]
        public void Should_Do_Some_Other_Test(){...}
    }    
}

我使用上述格式来构建共享公共设置代码的测试。