簡體   English   中英

Mockito-預期0個匹配器,記錄2個(InvalidUseOfMatchersException)

[英]Mockito - 0 Matchers Expected, 2 Recorded (InvalidUseOfMatchersException)

我引用了Stackoverflow上所有可用的資源來進行類似的查詢。 但我不確定此測試的問題是:

它引發以下異常。

[main] ERROR com.example.dao.spring.TransactionDAOSpring - org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Invalid use of argument matchers!0 matchers expected, 2 recorded.

以下是代碼:

import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyMapOf;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.when;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;

import com.example.dto.DisplayTwo;
import com.example.dto.DisplayOne;
import com.example.dto.DisplayThree;

public class TransactionDAOSpringTest {

    TransactionDAOSpring transactionDAOSpring;

    @Mock
    DataSource dataSource;
    @Mock
    JdbcTemplate jdbcTemplate;
    @Mock
    SimpleJdbcCall storedProc;

    @Rule
    public ExpectedException thrown = ExpectedException.none();

    private Map<String, Object> resultMap;
    private List<DisplayOne> displayOne;
    private List<DisplayTwo> displayTwo;
    private List<DisplayThree> displayThree;

    @Before
    public void beforeMethod() {
        MockitoAnnotations.initMocks(this);
        transactionDAOSpring = new TransactionDAOSpring();
        transactionDAOSpring.setJdbcTemplate(jdbcTemplate);
        transactionDAOSpring.setDataSource(dataSource);
        transactionDAOSpring.retrieveResultStoredProc = storedProc;
        resultMap = new HashMap<String, Object>();
        displayOne = new ArrayList<DisplayOne>();
        displayTwo = new ArrayList<DisplayTwo>();
        displayThree = new ArrayList<DisplayThree>();
    }

    @Test
    public void testRetrieve_When_ResultSet_Not_Empty() {
        displayOne.add(new DisplayOne());
        displayTwo.add(new DisplayTwo());
        displayThree.add(new DisplayThree());

        resultMap.put("DisplayOneResultSet", displayOne);
        resultMap.put("DisplayTwoResultSet", displayTwo);
        resultMap.put("DisplayThreeResultSet", displayThree);

        when(storedProc.execute(anyMapOf(String.class, Object.class)))
                .thenReturn(resultMap);
        Map<String, Object> returnedResultMap = transactionDAOSpring.retrieve(anyString(),
                anyLong());
        assertEquals(resultMap.size(), returnedResultMap.size());
    }

更新:調試后,似乎無法從數據源獲取連接,因此引發異常。

任何幫助,將不勝感激。

諸如anyString()anyLong()類的匹配器可用於anyLong()對象,例如在when()verify()調用內部。 在您的情況下:

 Map<String, Object> returnedResultMap = transactionDAOSpring.retrieve(
                                                           anyString(), anyLong());

是真正的方法調用。 我認為這是導致InvalidUseOfMatchersException原因。 嘗試使用存根值(如空字符串0L)調用您的方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM