使用生成的DAL代码进行单元测试

时间:2009-04-29 12:24:55

标签: c# unit-testing mocking .nettiers

我使用代码生成器(CodeSmith和.NetTiers模板)生成所有DAL代码。我为我的代码(业务层)编写单元测试,这些测试运行起来变得非常慢。问题是,对于每个测试,我重置数据库以使其处于干净状态。此外,由于我进行了大量测试,似乎数据库操作的延迟总计有点延迟。

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

通过这种方式,我可以在单元测试中使用这个模拟存储库,加快它们的速度,而不会实际更改我当前的代码!

3 个答案:

答案 0 :(得分:3)

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

您可以使用许多免费和开源库来帮助您。由于您使用的是C#,新的和即将推出的DI库之一是Ninject。还有很多其他的。查看此Wikipedia article以获取其他人和高级别说明。

答案 1 :(得分:1)

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

对于单元测试,您处理一层代码,其中所有其他依赖项都是模拟的或存根的。使用这种方法,您可以在每次增量代码更改时快速执行单元测试。

你可以使用各种模拟框架,比如Rhino Mock,Moq,typemock等等。 (在我的项目中,我使用Rhino mock来模拟DAL层和单元测试隔离中的业务层)

答案 2 :(得分:0)

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

xml的生成是自定义代码,如果您找到一个开源解决方案,那么我很高兴听到它。

在Stefan的回答之后编辑:我记得另一个团队使用SQL CE作为他们的测试数据库