繁体   English   中英

Gradld Build - 使用Mockito创建的模拟对象来运行单元测试

[英]Gradld Build - Use Mock Objects Created by Mockito for running unit tests

我有一个Spring Boot应用程序连接到外部Web服务。 该项目使用gradle构建。 我在我的程序中嘲笑外部调用。 当我在STS中作为junit test运行时,测试成功运行。 但是当我进行“gradle build”时,测试失败了。 当我查看日志时,我认为它失败了,因为测试是在击中实际服务而不是返回模拟对象。 为了让我的gradle构建选择mockito生成的模拟对象作为测试的一部分,我还需要做些什么吗?

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ProxyApplication.class)
@WebAppConfiguration
public class ApplicationWrapperTest {

    @Mock
    private SoapClient soapClient;

    @InjectMocks
    @Autowired
    private ApplicationWrapper applicationWrapper;

    @Before
    public void init() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testDatesInApplication() throws Exception{
      //return mock object (webservice response) when soapClient is called
    }

ApplicationWrapper代码

@Component
public class ApplicationWrapper {

    @Resource(name = "factory.soapClient")
    private SoapClientFactory soapClientFactory;

    @Autowired
    private JsonUtil jsonUtil;

    @Autowired
    private DomainUtil domainUtil;

    private static final String clientId = "soapClient";

    public String execute(String request, String apiName){
        Object req = domainUtil.createRequest(request, apiName);
        Object jaxbResponse = this.soapClientFactory.getClient(clientId).marshalSendAndReceive(req); 
        Object response = domainUtil.createResponse(jaxbResponse, apiName);
        return jsonUtil.toJsonString(response) ;
    }


  }

是的,您正在使用实际服务,因为您正在使用通过ProxyApplication.class插入的ProxyApplication.class 问题是你混合了两种测试方法:Mockito和Spring。

为了避免这些,你有几个选择:

  1. 在没有SpringJUnit4ClassRunner.class和Spring配置的情况下运行测试。 删除@Autowired 使用MockitoJUnitRunner.class 这将是真正的单元测试

     @RunWith(MockitoJUnitRunner.class) public class ApplicationWrapperTest { @Mock private SoapClientFactory soapClientFactory; @Mock private SoapClient soapClient; @InjectMocks private ApplicationWrapper applicationWrapper; @Before public void init() { MockitoAnnotations.initMocks(this); } @Test public void testDatesInApplication() throws Exception{ when(soapClientFactory.getClient(eq("yourclientid"))).thenReturn(soapClient); //return mock object (webservice response) when soapClient is called } 
  2. 为Spring配置创建spring test配置类,其中soapClient配置为Mock。

暂无
暂无

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

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