2009-04-29 98 views
0

我使用代码生成器(CodeSmith和.NetTiers模板)生成所有DAL代码。我为我的代码(业务层)编写单元测试,而且这些测试的运行速度很慢。问题是,对于每个测试,我重置数据库以具有干净的状态。另外,当我做了很多测试时,数据库操作的延迟似乎总是有点延迟。使用生成的DAL代码进行单元测试

所有数据库操作都是通过由.NetTiers生成的DataRepository类执行的。你知道是否有一种方法可以生成(或编写自己)一个可以使用内存存储而不是使用数据库的模拟DataRepository?

这样,我就可以在我的单元测试中使用这个模拟存储库,加快它们的速度,而不用真正改变我的当前代码!

回答

3

其他球队看看依赖注入(DI)和控制容器的反转(IOC)。本质上,您将创建一个新的模拟DB对象可以实现的接口,然后DI框架将在运行测试时注入您的模拟数据库,以及运行您的应用程序时注入真实的数据库。

有许多免费和开源的库可以帮助你。由于您使用的是C#,所以新的DI库之一是Ninject。还有很多其他的。看看这个Wikipedia article为他人和一个高层次的描述。

0

我们的一些单元测试使用从XML中提取的数据,这些数据是从数据库生成的,用于模拟数据库访问。 DAL类被替换为模拟类,因为它们都存储在DI容器中。

xml的生成是自定义代码,如果您发现这个开源解决方案,那么我很高兴听到它。斯特凡的答案后

编辑:我记得使用SQL CE他们的测试数据库

1

从问题描述中,我认为您正在执行集成测试,因为您的测试正在使用Business和DAL以及实时数据库。

对于单元测试,您需要处理一层代码,其中所有其他依赖项都是模拟或存根的。通过这种方法,您的单元测试将非常快速地执行每个增量代码更改。

有各种模拟框架,你可以使用像犀牛模拟,Moq,typemock命名一些。 (在我的项目中,我使用Rhino模拟来模拟隔离中的DAL层和单元测试业务层)

Harsha