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

如何为使用构造函数注入Bean的类编写JUnit测试

你可以选择两种测试方案,根据你的测试场景选就行:

方案1:纯JUnit单元测试(无需启动Spring,速度最快)

直接手动构造测试用的Strategy实例,传入StrategyHandler的构造函数做验证,完全脱离Spring环境,逻辑验证优先选这个。
参考代码(基于JUnit5+Mockito,也可以自己写静态内部类实现Strategy接口):

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Set;

public class StrategyHandlerTest {
    // 模拟两个Strategy实现类实例
    private final Strategy strategyA = mock(Strategy.class);
    private final Strategy strategyB = mock(Strategy.class);

    @Test
    public void testGetStrategy() {
        // 给模拟实例指定返回的名称
        when(strategyA.getName()).thenReturn("TYPE_A");
        when(strategyB.getName()).thenReturn("TYPE_B");

        // 手动实例化StrategyHandler,传入模拟的Strategy集合
        StrategyHandler handler = new StrategyHandler(Set.of(strategyA, strategyB));

        // 断言匹配名称返回对应实例
        assertSame(strategyA, handler.getStrategy("TYPE_A"));
        assertSame(strategyB, handler.getStrategy("TYPE_B"));
        // 断言不存在的名称返回null
        assertNull(handler.getStrategy("TYPE_NOT_EXIST"));
    }
}

如果要测重名覆盖的场景,构造两个同name的Strategy实例传入Set,断言返回的是最后一个写入Map的实例即可。

方案2:Spring集成测试

适合验证项目中所有真实的Strategy Bean都被正确注入到容器中,需要启动Spring上下文:
参考代码:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
public class StrategyHandlerSpringTest {
    @Autowired
    private StrategyHandler strategyHandler;

    @Test
    public void testAllStrategyInjected() {
        // 把你项目中所有Strategy实现类的getName返回值列出来逐一断言
        assertNotNull(strategyHandler.getStrategy("ORDER_PAY"));
        assertNotNull(strategyHandler.getStrategy("ORDER_REFUND"));
        assertNotNull(strategyHandler.getStrategy("ORDER_CANCEL"));
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:36:03