繁体   English   中英

如何单元测试数据库类

[英]How to unit test Database Class

这可能已被多次询问,但在这里:

我有一个充满数据库连接的类

打开连接
查询数据库
读取值
密切联系

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

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

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

难以测试的东西通常紧密耦合或不遵循单一责任原则

首先。 拆分数据层。 查看存储库模式 每个实体(表或视图)都应该拥有自己的类获取数据。

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM