c# - 数据访问层c#的单元测试

标签 c# .net unit-testing mocking data-access-layer

我有以下方法,其中业务层与数据访问层交互并返回集合对象。我是单元测试的新手,但需要向解决方案添加自动化单元测试。我阅读了多篇与单元测试相关的文章和理论,但我对如何进行感到困惑。如果有人可以用方法指导我,那将非常有帮助,

[DataObjectMethod(DataObjectMethodType.Select, true)]
public static WorkQueueBE GetItemByDetailsID(int detailsID)
{  return WorkQueueDB.GetItemByDetailsID(detailsID); }

该方法调用db层的GetItemsByDetailsID方法,调用存储过程,从数据库中获取数据,填充集合并返回一个对象。

最佳答案

我将对评论进行一些总结并添加一些新想法。你写

This method gives call to GetItemsByDetailsID method in db layer, which in turn calls a stored procedure, gets the data from database, fills the collection and returns an object.

对此的评论是 -> 单元测试应该只测试逻辑的一个孤立部分,即单个方法。不是整个流程,这是一个集成测试。

从我在您的代码片段中看到的情况来看,您使用的是具体类。如果你真的想让你的应用程序易于测试,你需要使用接口(interface)和抽象类,它们可以实例化为具体类,也可以很容易地模拟和 stub 。学习如何实现接口(interface)、抽象类和具体类的一种自然方法是进行测试驱动开发。从一个小项目开始,然后从那里学习 :)

如果我想对您提供的方法进行单元测试,我会将您的逻辑与数据访问层分开。我将通过让数据访问层类实现它们应该做的事情的接口(interface)来做到这一点。这样我就可以模拟数据访问层并只返回特定的数据片段,这只是我为业务层方法创建单元测试所需的部分。毕竟,在这种情况下,我想测试业务层方法的逻辑,而不是数据访问层方法的逻辑。

开始编写单元测试友好的代码非常困难,但是当您开始掌握时,您会爱上它的:)

这是很多理论,没有具体的例子,因为我认为你需要从你自己的一个小项目开始,并按照 TDD 的方式进行,通过这样做,你将了解单元测试的一切工作原理。

一些帮助您入门的链接 https://msdn.microsoft.com/en-us/library/aa730844(v=vs.80).aspx https://msdn.microsoft.com/en-us/library/ff847525(v=vs.100).aspx http://www.codeproject.com/Articles/321154/Test-Driven-Development-TDD-in-Csharp

Pluralsight 也有一些这方面的类(class)。希望这对您有所帮助!

关于c# - 数据访问层c#的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30030833/

相关文章:

c# - 禁用 SSL v3.0 并切换到 SHA 256 后 HTTPS 连接超时

c# - 在带有表达式的属性中使用的可空 DateTime 返回意外的默认值

c# - 在 Raspberry Pi 上使用 Mono 运行 Yeppp 库

.net - Microsoft.NET 和毁灭战士的多核 CPU

python - pytest:如何在 session 结束时获取所有失败测试的列表? (并且在使用 xdist 时)

java - 使用 junit 测试 websocket 服务器

c# - 同步 OWIN Cookie 过期(滑动)和 session 超时

.net - 在 Visual Studio 中,编程 .NET,如何从项目引用中分辨出文件引用?

c# - Visual Studio 2010 WPF 设计器规模

java - 具有多个私有(private)最终字段的测试 Config 类