Mockito Mock DataSourceTransactionManager失败原因

Mockito Mock DataSourceTransactionManager失败原因

现象

    @Mock
    private DataSourceTransactionManager mDataSourceTransactionManager;

    @Before
    public void runBeforeEachTest() {
    
    
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);

        when(mDataSourceTransactionManager.getTransaction(eq(def))).thenReturn(null);
        doNothing().when(mDataSourceTransactionManager).commit(any(TransactionStatus.class));
        doNothing().when(mDataSourceTransactionManager).rollback(any(TransactionStatus.class));
org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers!
0 matchers expected, 1 recorded:
-> at com.nuance.entrd.mc.nes.jobs.JobPollerTest.runBeforeEachTest(JobPollerTest.java:43)

This exception may occur if matchers are combined with raw values:
    //incorrect:
    someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
    //correct:
    someMethod(anyObject(), eq("String by matcher"));

For more info see javadoc for Matchers class.

    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:337)

原因

  • org.springframework.transaction.support.AbstractPlatformTransactionManager#getTransaction是个final方法
    在这里插入图片描述

解决办法

https://stackoverflow.com/questions/31807920/how-to-mock-datasourcetransactionmanager

猜你喜欢

转载自blog.csdn.net/xiaolixi199311/article/details/143177174