我对单元测试相当陌生。我有一个3层架构的站点,UI -> BLL -> DAL.并且我使用了asp.net提供程序模型,所以通过对web.config进行更改,我可以切换到dll来针对不同的数据源,从而完成DAL是用实体框架编写的。
现在,我的问题是我如何单元测试我的BLL?我用NUnit。
如果运行/调试我的站点,asp.net/IIS将加载所有内容,并从web.config获得正确的配置,因此一切正常工作,这是因为入口点来自IIS。现在,如果我使用NUnit gui进行测试,并且说我的测试项目"MySite.Test.dll“有测试用例给我的BLL,那么测试框架如何获得正确的配置来成功地运行所有测试。它需要web.config中的信息来加载正确的提供者!
现在,在我的DAL中,有一个App.config是由EntityFramework创建的,其中只有connectionString。我应该将所有与提供程序相关的配置都放在这个app.config中吗?还是我错过了一些关于如何正确地做这件事的大图?
这应该是一个常见的事情,我认为人们需要不断地做。谁能给出一些细节,我如何单元测试我的库。
谢谢你雷。
编辑:在阅读了前两个答案之后,我认为我应该用集成测试来修正我的描述。基本上,使用像NUnit这样的GUI工具来运行和测试我的代码,而不是以IIS作为入口点,所以NUnit -> BLL -> DAL。人们实际上是怎么安排的?
谢谢雷。
发布于 2008-11-19 00:48:49
看起来你想做的是-整合测试.单元测试,根据定义,隔离地测试普通的旧.Net类。没有数据库,没有configuration...so...as,为了进行正确的单元测试,您需要将BLL重构为服务层和域逻辑类,然后分别进行测试。例如:服务层使用域逻辑类,单元测试使用它们。因此,域类不转到数据库,您不需要连接字符串和所有东西。
但是,如果您想要与数据库进行适当的集成测试,您可能也需要这样做。如果这是你需要的-谷歌它,这是不难得到一些配置字符串在nunit.config或其他什么.我不知道细节。
但是,我觉得你想做的是单元测试,而不是集成测试。
问问你自己,我到底想测试什么?单元测试并不能测试“一切”。重构,反向依赖,并尝试测试您的业务逻辑隔离。
发布于 2009-04-15 11:22:00
您需要的不是单元测试项目中的"web.config“文件,而是可以输入测试正确配置的"MySite.Test.dll.config”文件。注意,使用此方法,如果需要,可以使用不同的提供程序连接到内存中的数据库。
发布于 2008-11-19 01:02:00
您有几个不同的选项,这取决于您希望与DAL之间的隔离程度。如果要将DAL包含在测试中,则可以将app.config文件的连接字符串部分复制到单元测试项目中的app.config文件中。不过,正如@badbadboy所说,这实际上是集成测试,而不是单元测试。
如果您想要进行适当的单元测试,您可能希望使用依赖注入和接口来模拟您的BLL中的DAL。我使用LINQ,所以我所做的就是围绕DataContext创建一个接口和包装类。这允许我创建一个模拟数据库,用于单元测试,以单独测试我的实体类。
隔离地测试实体类将降低测试的易碎性,并允许您独立地设置每个测试的数据。这使得维护起来容易得多。
您还可能希望查看一个模拟框架,该框架将使生成模拟对象变得几乎微不足道。我在犀牛队取得了很好的成功,但是还有其他的。
https://stackoverflow.com/questions/300664
复制相似问题