首页 > 解决方案 > java工厂类测试模拟实现列表

问题描述

我创建了一个工厂来提供IMyProcessor基于一些布尔标志的实例。下面用我的两个实现填充地图。

@Component
public class MyProcessorFactory {

    private static final Map<String, IMyProcessor> processorServiceCache = new HashMap<>();

    @Value("${processor.async:true}")
    private boolean isAsync;

    public MyProcessorFactory(final List<IMyProcessor> processors) {
        for (IMyProcessor service : processors) {
            processorServiceCache.put(service.getType(), service);
        }
    }

    public IMyProcessor getInstance() {
        IMyProcessor processor = isAsync ? processorServiceCache.get("asynchronous") : processorServiceCache.get("synchronous");
        return processor;
    }
}

我现在正在尝试使用 Junit5 编写单元测试,但我正在努力设置实现列表:

我尝试了以下方法:

@ExtendWith(MockitoExtension.class)
class ProcessorFactoryTest {

    @InjectMocks
    private MyProcessorFactory myProcessorFactory;


    @Test
    void testAsyncIsReturned() {
        
    }
    
    @Test
    void testSyncisReturned() {}
}

我想根据布尔标志异步真/假进行测试,返回正确的实现。

了解您如何编写此类测试用例将很有帮助。我将接口的实现作为构造注入自动装配到列表中,然后使用字符串键添加到地图中。

除了答案之外,我对其他可能使测试更容易的想法/重构持开放态度。

标签: javaspringspring-bootjunitmockito

解决方案


推荐阅读