Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对数据库类进行单元测试_C#_Database_Unit Testing - Fatal编程技术网

C# 如何对数据库类进行单元测试

C# 如何对数据库类进行单元测试,c#,database,unit-testing,C#,Database,Unit Testing,这可能已经被问过很多次了,但这里是这样的: 我有一个满是db连接的类 打开连接 查询数据库 读取值 密切联系 我应该如何对这些东西进行单元测试 我需要创建一个假的数据库吗? 我想我可以模拟MySql类(对于c#),但这也是一个很大的工作 有些语句是“INSERT INTO”,对此我应该怎么做?最简单的方法是创建一个新的测试数据库并进行一些INSERT查询,然后将结果集存储在列表或其他内容中,然后使用调试器运行它,查看它是否将结果集存储在您创建的列表中 不要在源代码中插入任何intsert,使用s

这可能已经被问过很多次了,但这里是这样的:

我有一个满是db连接的类

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

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

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


有些语句是“INSERT INTO”,对此我应该怎么做?

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


不要在源代码中插入任何intsert,使用sql management Studio并在那里进行插入,直到您知道连接和一切都正常为止。现在只需列出所有这些值

很难测试的东西通常都是或不符合标准的

首先。拆分数据层。看这张照片。每个实体(表或视图)都应该有自己的类来获取数据

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

这样做会使测试数据层变得更加容易。记住,数据分析器不应该有任何逻辑。它的唯一用途是从数据源加载数据


但是,如果您不想更改内容:使用数据库是最简单的方法。在每次测试之前删除所有数据并插入新的测试数据(以删除上一次测试期间的任何更改)。

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

我为此制作了一个Nuget软件包,您可以将其添加到您的项目中:


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

如果您认为之前可能有人问过一个问题,您应该这样做。好的,但请注意这些单元测试是否并行运行—此时第二个测试将删除第一个测试所需的数据。如果测试框架发生更改,或者当新版本更改测试执行顺序时,可能会发生这种情况。我最近调试了这个问题。