繁体   English   中英

使用Autofac和Moq进行集成测试

[英]Integration Test Using Autofac and Moq

使用Autofac和moq进行集成测试是一个好主意吗? 我在网上找到的大多数示例和文档,都集中在单元测试中使用二者。 集成测试有什么好的例子吗? 通过集成测试,我指的是某种方法,例如按纽,按自上而下或三明治式。

我建议您定义集成测试的含义,因为该术语没有一个公认的定义。 我假设您的意思是单独测试整个应用程序,即一起测试多个(也许数百个)类,但不与外部系统(例如数据库,http服务)进行交互。

在项目中引入某种依赖注入或控制反转是一个好主意。 无论您使用Autofac还是其他解决方案,集成测试的好处都是相同的-依赖注入使您可以使用在内存中运行的模拟或存根版本替换与外界通信的系统部分(例如DAO) 。 例如,在生产中,您可能会使用由外部MSSQL数据库支持的DAO,但在集成测试中,您可能会使用由内存中Dictionary或HashMap支持的存根DAO。

至于Moq,我不建议您使用Moq进行集成测试。 模拟对于单元测试非常有用,因为单元测试可以在系统中测试很小的区域,并且与模拟对象的交互通常很简单(如果不是,那么您应该重构单元测试!)。 但是,通过集成测试,您正在测试整个系统,并且可能与您尝试模拟的对象进行很多很多互动。 此外,随着系统的变化,即使结果保持不变,与模拟的交互也可能会发生变化。 因此,为集成测试设置和维护模拟程序将变得非常困难且乏味,因为通常您必须设置许多很多方法调用。

此外,集成测试可能是多线程的,事情可能并不总是以相同的顺序发生。 再次,很难嘲笑!

集成测试的更好方法是实际实现对象的内存版本。 它的行为应尽可能接近真实事物。 您可能必须在内存实现中为此添加其他方法,以进行设置初始状态(在DAO示例中,设置一些测试数据)或检查输出等操作。 从长远来看,随着集成测试基础的增加,您会发现这更加灵活。

需要明确的是,我认为起订量对于单元测试非常有用,而对于集成测试则不是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM