2015-05-04 121 views
2

我有以下方法,其中业务层正在与数据访问层交互并返回集合对象。我是单元测试新手,但需要为解决方案添加自动化单元测试。我阅读了多篇与单元测试相关的文章和理论,但我对如何继续进行了解。这将是非常有益的,如果有人能指导我用的方法,单元测试数据访问层c#

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

这种方法可以让在DB层,进而调用存储过程,从数据库获取数据调用GetItemsByDetailsID方法,填补了收集和回报一个东西。

+1

尝试为您的数据访问对象实现[Mock](http://en.wikipedia.org/wiki/Mock_object),并将它们注入业务层。 –

+0

如果OP的目的是测试业务逻辑正在调用预期的数据访问方法,那么是的。但我更倾向于猜测它的数据访问层应该被测试,以便他们调用从部署的数据库中实际发现的实际存储过程,并返回适当的对象? –

+0

@JanneMatikainen这将使它成为一个集成测试,而不是单元测试。 – jessehouwing

回答

1

我会总结一下评论以及添加一些新的想法。你写

这种方法可以让在DB层, 进而调用存储过程调用GetItemsByDetailsID方法,从数据库中获取数据, 填充集合,并返回一个对象。

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

从我在你的代码片段中看到的,你使用具体的类。如果你真的想让你的应用程序易于测试,你需要使用接口和抽象类,这些类可以被实例化为具体的类,并且可以轻松地进行嘲弄和挖掘。关于如何学习如何实现接口,抽象类和具体类的一种自然方法是进行测试驱动开发。从一个小项目开始,并从中学习:)

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

这是很艰难的开始做单元测试的代码开发,但是当你开始你的手柄会喜欢它:)

这是一个很大的理论,并没有具体的例子,因为我觉得你需要从你自己的一个小项目开始,以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有一些这方面的课程。希望这可以帮助!