【问题标题】:Spring boot integration test injecting mock object via autowireSpring Boot 集成测试通过 autowire 注入模拟对象
【发布时间】:2015-04-25 14:24:47
【问题描述】:

我正在使用带有基于 java 的配置的 spring boot。我有以下类结构

@Service
public class Service implements IService{
    @autowire
    private IProcessor processor;

    public void perform(Parameter param){
        processor.process(param);
    }
}

@Service
public class Processor implements IProcessor {
    @autowire
    private ProxyFactory factory;

    public void process(Parameter param){
        final ExternalSysProxy proxy = factory.get(param.getValue(), param.getId());
        proxy.call();
    }
}

@Repository
public class ProxyFactory {
    public Proxy get(String value, String id){
        final ExternalSysProxy proxy = new proxy(value, id);
        return proxy;
    }
}

这里的代理对象调用外部系统。我想通过模拟代理对象来编写集成测试。您能否给我一些指导,如何在这个结构中注入模拟代理对象。

【问题讨论】:

    标签: java spring unit-testing mocking integration-testing


    【解决方案1】:

    调用ProxyFactory.get(String value, String id)时可以mock ProxyFactory并返回Proxy的mock

    我喜欢在我的单元测试中使用 Mockito:

    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.mockito.InjectMocks;
    import org.mockito.Mock;
    import org.mockito.Mockito;
    import org.mockito.runners.MockitoJUnitRunner;
    
    @RunWith(MockitoJUnitRunner.class)
    public class ProcessorTest {
    
        @InjectMocks
        private Processor processor;
    
        @Mock
        private ProxyFactory proxyFactoryMock;
    
        @Mock
        private Proxy proxyMock;
    
        @Test
        public void myTest() {
            Mockito.when(proxyFactoryMock.get("value", "id")).thenReturn(proxyMock);
    
            processor.process(new Parameter("value", "id"));
    
            Mockito.verify(proxyMock, Mockito.times(1)).call();
        }
    
    }
    

    【讨论】:

    • 如何在我的处理器类中注入 ProxyFactory 的模拟,因为 ProxyFactory 是由 spring 自动发现并注入的
    猜你喜欢
    • 2021-05-28
    • 2021-05-14
    • 2020-02-17
    • 2021-04-09
    • 2019-11-10
    • 2013-06-15
    • 2014-04-16
    • 2017-08-04
    • 1970-01-01
    相关资源
    最近更新 更多