Java Mockito测试失败:实际上,与此模拟没有任何交互
只是想问一下,因为我被困在测试用例中,得到的错误是“实际上,这个模拟没有任何交互” 我已经创建了一个Dao实现类,它正在执行CRUD操作Java Mockito测试失败:实际上,与此模拟没有任何交互,java,hibernate,junit,powermock,powermockito,Java,Hibernate,Junit,Powermock,Powermockito,只是想问一下,因为我被困在测试用例中,得到的错误是“实际上,这个模拟没有任何交互” 我已经创建了一个Dao实现类,它正在执行CRUD操作 public class EmployeeDaoImpl implements EmployeeDao { @Override public void saveEmployee(EmployeeDetails employee) { Session session = HibernateUtil.getS
public class EmployeeDaoImpl implements EmployeeDao {
@Override
public void saveEmployee(EmployeeDetails employee) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
session.save(employee);
transaction.commit();
session.close();
}
}
对于上面的这个类,我正在使用Mockito构建测试。因此,对于我上面的saveEmployee方法会话,事务我将其作为模拟对象,现在我需要检查会话,保存方法以及事务
因此,我编写了以下Mockito代码:
/**
*
*/
我已经调试了代码,代码将传递到IDE中的所有断点,当我执行此操作时,3个值将被添加到数据库中,但我的测试用例将失败,因为没有交互。测试中的会话模拟与EmployeeDaoImpl#saveEmployee中使用的对象不同 使用会话参数实现EmployeeDaoImpl的构造函数,并在saveEmployee()方法中使用该参数。这允许@InjectMock按预期工作
@RunWith(MockitoJUnitRunner.class)
public class MockitoTest {
@Mock
Session session;
@InjectMocks
EmployeeDaoImpl edi;
@Test
public void testSaveEmployee(){
edi.saveEmployee();
verify(session, times(1)).save();
}
}
class Session {
void save() {
System.out.println("saving");
}
}
interface EmployeeDao {
void saveEmployee();
}
class EmployeeDaoImpl implements EmployeeDao {
private Session session;
public EmployeeDaoImpl(Session session) {
this.session = session;
}
@Override
public void saveEmployee() {
session.save();
}
}
感谢兄弟解释我,但我需要添加到这个交易,我会尝试这样做。还有一件事是HibernateUtil.getSessionFactory().openSession();是静态的,我想我们不能使用任何我可以使用的方法@luc14n0@SandeepV您可以浏览PowerMockito库来模拟静态方法
@RunWith(MockitoJUnitRunner.class)
public class MockitoTest {
@Mock
Session session;
@InjectMocks
EmployeeDaoImpl edi;
@Test
public void testSaveEmployee(){
edi.saveEmployee();
verify(session, times(1)).save();
}
}
class Session {
void save() {
System.out.println("saving");
}
}
interface EmployeeDao {
void saveEmployee();
}
class EmployeeDaoImpl implements EmployeeDao {
private Session session;
public EmployeeDaoImpl(Session session) {
this.session = session;
}
@Override
public void saveEmployee() {
session.save();
}
}