我有以下方法,其中业务层与数据访问层交互并返回集合对象。我是单元测试的新手,但需要在解决方案中添加自动化单元测试。我阅读了与单元测试相关的多篇文章和理论,但我对如何进行感到困惑。如果有人可以用方法指导我,那将非常有帮助,
[DataObjectMethod(DataObjectMethodType.Select, true)]
public static WorkQueueBE GetItemByDetailsID(int detailsID)
{ return WorkQueueDB.GetItemByDetailsID(detailsID); }
此方法在db层中调用GetItemsByDetailsID方法,后者又调用存储过程,从数据库获取数据,填充集合并返回对象。
答案 0 :(得分: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也有一些课程。希望这有帮助!