我是单元测试项目的新手,我想知道如何创建和使用数据库连接。有人可以提供VB.Net示例吗?似乎大多数都在c#
中这是我所拥有的!函数GetCorrectedTransactionEffectiveDate需要一个连接对象,因为它在数据库中查找一些好东西
所以我对如何在单元测试中做到这一点感到有些困惑?
<TestClass()> Public Class UnitTest1
<DataSource ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\BServer\bucshared\Systems\ApplicationData\BOne\ENV_DEV\Database\BOne.accdb; Jet OLEDB:Database Password=password"), ]
<TestMethod()> Public Sub RecordedDateTest()
Dim DateToday As New Date(2014, 6, 14)
Dim TransactionDate As New Date(2014, 7, 15)
Dim oUtil As New BerkleyOne.clsDbUtil({Database connection})
Dim Res as date = oUtil.GetCorrectedTransactionEffectiveDate(TransactionDate)
End Sub
End Class
答案 0 :(得分:1)
TL; DR,我认为DataSourceAttribute
不是您想要的。
根据the class's documentation,其目的是识别用于测试方法输入的数据存储。
因此,在您的情况下,您要使用的方式是:
Date
(或DateTime
)参数oUtil.GetCorrectedTransactionEffectiveDate()
DataSourceAttribute
将确定如何找到测试输入值...但是(据我所知),这比单元测试更像是集成测试。
为了能够对您的代码进行单元测试,您的代码应遵循Single Responsibility Principle。但是看来GetCorrectedTransactionEffectiveDate()
方法至少在做两件事:
正如我在评论中指出的那样,在自动化测试的世界(这似乎是您的目标)中,单元测试应该(自然)测试代码,并且能够迅速地进行测试。因此,您不希望要进行单元测试的代码执行网络,数据库甚至磁盘I / O。
一种常见方法是将日期计算逻辑和数据库访问分开,如下所示:
GetFooById()
,GetFooByName()
等)定义接口-通常称为“存储库”; clsDbUtil
以接受IFooRepository
作为构造函数参数(而不是连接字符串),并将所有数据检索工作委托给存储库。现在,您可以对日期计算进行一次测试,该测试最多可以运行几毫秒。因此,下次发生“ Y2K”类型日历更改事件时,您将能够快速验证(回归测试)您必须对日期计算进行的任何更改。
另一个好处是,存储库接口是(或应该是)与媒体无关的。如果您必须从数据库转到XML或JSON文件或Web服务,则任何日期计算代码都不会受到影响。
我意识到所有这些都不是小事。而且,修改clsDbUtil
或其他内容的源代码并不总是可行的。您仍然可以测试该方法。再次,它将更多地是一个集成测试,但是(正如评论所指出的),它仍然比根本没有测试要好得多。
自动化测试(单元/集成/验收测试)是一个大话题;在这里我只涉及了表面。
假设我没有吓you您,建议您阅读Roy Osherove's The Art of Unit Testing。如果您使用的代码库无法(轻松)进行自动化测试,那么我还建议您使用Michael Feathers' Working Effectively with Legacy Code。