Xunit.DependenecyInjection 对 HostApplicationBuilder 的支持

💡 原文中文,约2200字,阅读约需6分钟。
📝

内容提要

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 类实现了该接口以提供具体的随机值生成逻辑。

🏷️

标签

➡️

继续阅读