簡體   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