gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:42:16 26 4
gpt4 key购买 nike

我有一个连接到外部网络服务的 Spring Boot 应用程序。该项目是使用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 插入的 bean。问题是您正在混合使用 2 种测试方法: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 测试配置类,其中 soapClient 配置为 Mock。

关于java - Gradld Build - 使用 Mockito 创建的模拟对象运行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38705173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com