【问题标题】:Share DB setup data between multiple unit test classes在多个单元测试类之间共享数据库设置数据
【发布时间】:2016-04-28 11:34:05
【问题描述】:

我不确定真正的单元测试是否应该与数据库等外部系统严格交互,但我的确实如此——我的设置代码的想法是确保数据库处于某种状态,然后我的单元测试期望来自方法的某些结果被调用;我需要检查 DB-access 代码是否正确。

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

  1. 将其全部放入外部 .sql 脚本并运行它
  2. 某种带有静态方法的辅助类

我希望更新数据库的代码是我的 C# 代码的一部分,但想知道 MSTest 项目是否有更典型的方式来处理这个问题?

【问题讨论】:

  • 引用外部系统是个坏主意。我更喜欢在数据访问层和业务层之间创建一个层。例如,有一个带有数据访问方法和属性的接口。这可以测试。
  • 我想我一般同意,但这就是设置的方式。如果这能让你更快乐,就称它为不同类型的测试:) 集成?
  • 是否需要为每个测试重置 Db 还是将其用作所有测试。
  • 你会使用继承。您可以创建一个基础测试类并让其他类继承它(包括[TestInitialize])。看看这篇文章Structuring Unit Tests
  • @Mr.Boy 根据我在之前评论中链接到的文章检查我的答案。

标签: c# unit-testing mstest


【解决方案1】:

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

您可以创建一个基础测试类并让其他类继承它(包括每个测试都会调用的[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(){...}
    }    
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多