如何单元测试数据库类

时间:2010-10-26 18:16:04

标签: c# database unit-testing

可能已经多次询问过这个问题,但在这里:

我有一个完整的db连接类

打开连接
查询db
读取值
关闭连接

我应该如何对这些东西进行单元测试?

我是否需要创建虚假数据库? 我想我可以模拟MySql类(对于c#),但这也是很多工作。

有些陈述是“INSERT INTO”,我该怎么办呢?

3 个答案:

答案 0 :(得分:7)

难以测试的内容通常为tightly coupled或不遵循Single Responsibility principle

首先。拆分数据层。看看repository pattern。每个实体(表或视图)都应该拥有自己的类获取数据。

使用数据接口而不是特定的驱动程序实现:IDbConnection而不是SqlConnection。使用DbProviderFactory来获得正确的连接实现。然后使用connection.CreateCommand()获取命令等。

尽一切努力使测试数据层变得更加容易。请记住,数据库不应该有任何逻辑。它的唯一目的是从数据源加载数据。

但是如果你不想改变东西:对数据库工作是最简单的方法。在每次测试之前删除所有数据并插入新的测试数据(以删除上一次测试期间的任何更改)。

答案 1 :(得分:2)

最简单的方法是创建一个新的测试数据库并制作一些插入查询,然后将结果集存储在列表或其他内容中,然后使用调试器运行它以查看它是否将结果集存储在您创建的列表中。

在源代码中没有任何插入,使用sql管理工作室并在那里插入,直到你知道连接和一切正常。现在就删除所有这些值。

答案 2 :(得分:0)

您可以使用在您的计算机上本地运行的实时MySql数据库。

我为此目的制作了一个Nuget包,您可以添加到您的项目中:https://github.com/stumpdk/MySql.Server

每次运行测试时它都会启动本地MySql服务器。它很快,为您的团队提供了一个可以共享的解决方案,而且您不必花时间安装服务器。