我正在测试一个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;
}
答案 0 :(得分:3)
Mockito不会模拟静态方法。只有实例方法。
模拟静态方法需要重新定义类本身。
模拟实例方法只需要创建动态生成的子类的实例,该实例将覆盖超类的所有方法。
使你的方法成为一个实例方法(最好),或使用PwerMockito,AFAIK允许模拟静态方法(但更复杂,更慢)