when()需要一个参数,该参数必须是模拟'上的方法调用。

时间:2014-08-12 19:20:27

标签: hibernate mockito spring-test

我正在测试一个Spring服务,我想创建一个模拟会话,所以我不必连接到实际的数据库。

不幸的是:

org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'.

TweetServiceTest.java

Session session;
TweetService tweetService = new TweetServiceImpl();

@Before
public void setUp() throws Exception {
    session = Mockito.mock(Session.class);
    HibernateUtil hibernateUtil = Mockito.mock(HibernateUtil.class);
    Mockito.when(hibernateUtil.getSession()).thenReturn(session);
}

HibernateUtil.java

public static Session getSession() {
    Session session = null;
    try {
        session = HibernateUtil.getSessionFactory().getCurrentSession();
        if (!session.isOpen()) {
            session = HibernateUtil.getSessionFactory().openSession();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return session;
}

1 个答案:

答案 0 :(得分:3)

Mockito不会模拟静态方法。只有实例方法。

模拟静态方法需要重新定义类本身。

模拟实例方法只需要创建动态生成的子类的实例,该实例将覆盖超类的所有方法。

使你的方法成为一个实例方法(最好),或使用PwerMockito,AFAIK允许模拟静态方法(但更复杂,更慢)