如果通过调用mocked方法提供了eq()匹配器的值,则验证失败

时间:2018-03-06 16:34:44

标签: java junit mockito matcher

例如,我有以下测试(JUnit 4.12,Mockito 1.9.5)

public class SomeServiceTest {

    SomeDao someDao = mock(SomeDao.class);
    SomeService someService = new SomeService(someDao);;

    @Test
    public void test() {
        UserModel user = mock(UserModel.class);
        when(user.getName()).thenReturn("name");

        someService.perform(user);

        verify(someDao).someDaoMethod(any(), eq(user.getName()));
    }
}

失败是因为mockito认为没有使用someDaoMethod返回的值调用方法user.getName()。 但如果我用

替换最后一行
String name = user.getName();
verify(someDao).someDaoMethod(any(), eq(name));

它过去了!那么,如果name == user.getName()为什么然后someDaoMethod(any(), eq(user.getName()))失败但someDaoMethod(any(), eq(name))通过?有没有办法在不创建局部变量的情况下克服这个问题?

Bellow是SomeServiceSomeDao的实现。 UserMode只是一个JavaBean。

public class SomeService {

    private SomeDao someDao;

    public SomeService(SomeDao someDao) {
        this.someDao = someDao;
    }

    public void perform(UserModel user) {
        someDao.someDaoMethod("random", user.getName());
    }
}

public class SomeDao {

    public void someDaoMethod(String id, String name) {
        //...
    }
}

0 个答案:

没有答案