写入单元测试查询数据库的方法

Jon*_*Jon 12 .net c# nunit unit-testing

我正在学习TDD,我目前有一种方法可行,但我想我可以使用TDD重建它.

该方法基本上需要6个参数,查询数据库,做一些逻辑并返回a List<T>

我的初始测试包括检查空/零定义的字符串和int方法参数值,但现在我不知道该怎么做.如果我没有使用TDD,我只需创建代码来查找数据库连接字符串并打开数据库连接,查询数据库,读取值等.

显然我们不能在单元测试中做到这一点,所以我想了解如何继续.

Jos*_*arl 10

请记住,TDD与良好的设计有关,而不是测试.这种方法有太多的进展; 它违反了"关注分离"原则.

您已经确定了需要测试的几个方面:

该方法基本上需要6个参数,查询数据库,做一些逻辑并返回a List<T>

那里有几个不连续的步骤,代码中可能还有一些隐藏的步骤.打破这些是TDD游戏的名称.

对于初学者来说,分解执行逻辑的部分可能是个好主意.

您的方法是否动态构建查询?打破这一部分并测试它以确保查询正确写入.

您可以将查询的执行放入独立的存储库或类似的存储库中,并针对该存储库编写集成测试.这样,您只需要对数据库进行简单测试,而不是使用当前的复杂方法.

如果您尝试按原样进行测试,您可能最终会进行怪物测试,需要进行大量设置并复制所有业务逻辑,并且当它发生故障时,将不清楚出现了什么问题.


Joh*_*ers 6

一般来说,使用TDD测试数据库代码并没有"错误".但是,您可能会尝试抽象出数据库代码,然后嘲笑它.