这个测试项目使用了老版本的 AutoMapper,每个有使用到 AutoMapper 的地方都会需要在测试用例里调用一下注册 AutoMapper mapping 关系的方法来注册 mapping 关系,因为 Register 方法里直接调用的Mapper.Initialize 方法注册 mapping 关系,多次调用的话会抛出异常,所以每个测试用例方法里用到 AutoMapper 的都有这个一段恶心的逻辑
第一次修改,我在 Register 方法做一个简单的改造,把 try...catch 移除掉了:
但是这样还是很不爽,每个用到 AutoMapper 的测试用例还是需要调用一下 Register 方法
使用 Xunit.DepdencyInjection 之后就可以只在 Startup 中的 Configure 方法里注册一下就可以,只需要调用一次就可以了
后面我们把 AutoMapper 升级了,使用依赖注入模式使用 AutoMapper,改造之后的使用
直接在测试用例的类中注入需要的服务 IMapper 即可
集成测试集成测试也是类似的,集成测试我用自己的项目作为一个示例
我的集成测试项目最初是用 xunit 里的 CollectionFixture 结合 WebHost 来实现的(从 2.2 更新过来的,),在 .net core 3.1 里可以直接配置 WebHostedService 就可以了,而 Xunit.DependencyInjection 是基于 微软的 GenericHost 的所以,也会比较简单的做集成。
在 Startup 里 通过 ConfigureHost 方法配置 IHostBuilder 的扩展方法 ConfigureWebHost ,注册测试需要的服务,在测试示例类的构造方法中注入服务即可