繁体   English   中英

Spring Boot集成测试通过Autowire注入模拟对象

[英]Spring boot integration test injecting mock object via autowire

我正在使用基于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;
    }
}

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

您可以模拟ProxyFactory并在调用ProxyFactory.get(String value,String id)时返回Proxy的模拟

我喜欢在单元测试中使用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();
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM