Xunit.DependenecyInjection 对 HostApplicationBuilder 的支持
内容提要
Xunit.DependencyInjection最近增加了对HostApplicationBuilder的支持。我们可以使用HostApplicationBuilder的编程模型来注册配置和服务。提供了注册服务和测试的示例代码。
延伸解读
配置驱动服务注册的灵活性
在 ConfigureHostApplicationBuilder 方法中,可以通过 builder.Configuration 读取配置值,并据此决定是否注册服务。示例中根据 CounterInitValue 是否大于 0 来条件注册 IRandom 服务。这种方式让测试环境能够灵活调整服务组合,无需修改代码即可适应不同配置场景。
初始化逻辑的放置位置
文章指出初始化操作可以放在 Configure 方法中,也可以自定义 HostedService。示例中 Configure 方法读取 CounterInitValue 并赋值给静态字段 Counter,供测试验证。这为需要执行一次性初始化的测试提供了两种可选方案,开发者可根据复杂度选择。
测试中依赖注入的使用方式
测试类通过构造函数注入 IRandom,并在测试方法中直接使用。ConfigurationTest 使用 [FromServices] 特性注入 IConfiguration,验证配置项是否正确加载。这表明 Xunit.DependencyInjection 支持在测试中灵活获取注册的服务和配置,简化了测试代码。
Q&A
Xunit.DependencyInjection 如何支持 HostApplicationBuilder?
Xunit.DependencyInjection 最近新增了对 HostApplicationBuilder 的支持,可以使用其编程模式注册配置和服务。
如何在 HostApplicationBuilder 中注册服务?
可以通过定义 ConfigureHostApplicationBuilder(IHostApplicationBuilder builder) 方法来注册服务配置。
示例代码中如何使用 InMemoryCollection?
示例代码中使用 InMemoryCollection 注册了配置项,如 'Hello' 和 'CounterInitValue'。
如何根据配置项的值决定是否注册服务?
可以通过检查配置项的值,例如 'CounterInitValue',来决定是否注册服务。
如何进行测试以验证服务和配置?
提供了测试示例,包括随机值测试和配置测试,使用 Xunit 框架进行验证。
IRandom 接口和 RandomService 类的作用是什么?
IRandom 接口用于定义生成随机值的方法,RandomService 类实现了该接口以提供具体的随机值生成逻辑。