You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core会话状态单元测试中如何使用Microsoft.Extensions.DependencyInjection

在测试中为Microsoft.AspNetCore.SystemWebAdapters使用Microsoft.Extensions.DependencyInjection

要在测试中引入依赖注入,核心是通过ServiceCollection构建DI容器,注册所需服务后从容器获取实例。以下是针对你的测试类的改造方案:

步骤1:添加必要的NuGet包

确保测试项目已安装Microsoft.Extensions.DependencyInjection包,用于构建DI容器。

步骤2:改造测试类

借助TestInitialize初始化DI容器并注册Mock依赖,TestCleanup清理容器避免资源泄漏,测试方法从容器获取实例而非手动创建:

[TestClass]
public class HttpSessionStateTests
{
    private readonly Fixture _fixture;
    private ServiceProvider _serviceProvider;
    private string _expectedSessionId;

    public HttpSessionStateTests()
    {
        _fixture = new Fixture();
    }

    [TestInitialize]
    public void SetupDependencyInjection()
    {
        // 1. 创建服务集合
        var services = new ServiceCollection();

        // 2. 生成测试用SessionID并配置Mock
        _expectedSessionId = _fixture.Create<string>();
        var mockSession = new Mock<ISessionState>();
        mockSession.Setup(s => s.SessionID).Returns(_expectedSessionId);

        // 3. 将依赖注册到DI容器
        services.AddSingleton(mockSession.Object);
        services.AddSingleton<HttpSessionState>();

        // 4. 构建服务提供者
        _serviceProvider = services.BuildServiceProvider();
    }

    [TestCleanup]
    public void CleanupServiceProvider()
    {
        // 释放服务提供者,避免资源泄漏
        _serviceProvider.Dispose();
    }

    [TestMethod]
    public void SetupSessionID_WhenRetrieved_ShouldReturnTheSameSessionID()
    {
        // Arrange:从DI容器获取HttpSessionState实例
        var state = _serviceProvider.GetRequiredService<HttpSessionState>();

        // Act
        var result = state.SessionID;

        // Assert
        result.Should().Be(_expectedSessionId);
    }
}

关键说明

  • 隔离测试环境:TestInitialize和TestCleanup确保每个测试拥有独立的DI容器,避免测试间状态污染。
  • 模拟依赖注入:将Mock的ISessionState注册为单例,让HttpSessionState在构造时自动获取该依赖,完全贴合真实项目的依赖注入逻辑。
  • 资源管理:测试结束后释放ServiceProvider,避免不必要的资源占用。

内容的提问来源于stack exchange,提问作者user1263981

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:32:37