Autofac 通过 PreserveExistingDefaults 解决单元测试 Fake 对象被覆盖

编程入门 行业动态 更新时间:2024-10-09 08:32:24

Autofac 通过 PreserveExistingDefaults 解决单元测试 Fake 对象<a href=https://www.elefans.com/category/jswz/34/1686226.html style=被覆盖"/>

Autofac 通过 PreserveExistingDefaults 解决单元测试 Fake 对象被覆盖

在使用 Autofac 作为 IoC 容器,因为 Autofac 默认的创建时机是在主机运行时。而在此 Module 被 Load 时注入的对象的注入的时机,将会在单元测试 Fake 注入之后,这就意味着 Load 时注入的对象将会覆盖 Fake 的对象。可以通过调用 Autofac 的 PreserveExistingDefaults 方法解决覆盖的问题

在进行集成测试,需要注入一些 Fake 的或者 Mock 的等用来测试的对象,这些对象期望替换掉原有的业务逻辑的对象。而在使用 Autofac 框架,将因为对象创建时机的问题,而让单元测试不好玩

单元测试注入的顺序,是在业务对象注入之前,因此业务对象将会替换掉单元测试注入的对象

通过 PreserveExistingDefaults 方法,可以在框架判断,如果在此之前已有注册,那么将不再进行注册,代码如下

            builder.RegisterType<Foo>().As<IFoo>()// 通过 PreserveExistingDefaults 可以在已经注册过了的应用,不会被覆盖为 Foo 类型// 在单元测试使用,单元测试注入了测试用的消费者,可以不被覆盖.PreserveExistingDefaults();

此时就可以在单元测试中,通过如下代码注入 FakeFoo 对象

            Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder().ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();webBuilder.UseTestServer(); //关键是多了这一行建立TestServer})// 使用 auto fac 代替默认的 IOC 容器 .UseServiceProviderFactory(new AutofacServiceProviderFactory(builder =>{builder.RegisterModule(new FakeFooModule());}))class FakeFooModule : Autofac.Module{protected override void Load(ContainerBuilder builder){builder.RegisterType<FakeFoo>().As<FakeFoo>().As<IFoo>().SingleInstance();}}

上面代码就是尝试注入 FakeFoo 作为 IFoo 服务,在业务逻辑里面,将判断 IFoo 服务是否已注册,如果没有被注册,才注册为 Foo 对象

更多集成测试请看 asp dotnet core 基于 TestServer 做集成测试

我搭建了自己的博客 / 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

如有不方便在博客评论的问题,可以加我 QQ 2844808902 交流


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

更多推荐

Autofac 通过 PreserveExistingDefaults 解决单元测试 Fake 对象被覆盖

本文发布于:2024-02-06 14:05:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1749428.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:被覆   单元测试   对象   Autofac   PreserveExistingDefaults

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!