我有一个 DAO impl 类,我正在尝试使用 testng 编写单元测试。我的类有一个自动连接到其中的 SessionFactory,这就是我在测试类中使用 MockBean 注释的原因。在我想要测试的实际课程中,我有以下代码行:
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(ArchiveItem.class);
为了运行测试,我试图存根 SessionFactory 的行为。目前,我什至无法在 getCurrentSession 方法上创建存根。
这是我当前的测试课:
@ContextConfiguration(locations="classpath:test-context.xml")
public class MyDAOImplTest extends AbstractTestNGSpringContextTests {
@Mock
private Session session;
@Mock
private Criteria criteria;
@MockBean
SessionFactory sessionFactory;
@Autowired
private MyDAOImpl myDaoImpl;
@BeforeMethod
public void setup(){
MockitoAnnotations.initMocks(this);
Mockito.when(sessionFactory.getCurrentSession()).thenReturn(session);
}
@Test
public void contextLoad(){
System.out.println("Context Loads");
}
}
但是,当我运行这个时,我得到:
java.lang.NullPointerException
这似乎来自以下代码行:
Mockito.when(sessionFactory.getCurrentSession()).thenReturn(session);
谢谢大家的帮助。我发现这个问题与 testng 需要 @Autowired 注释和 @MockBean 有关: @MockBean 注入正确,但测试类上为空值
另外,我使用的是mockito-all,我必须升级到mockito-core。我正在使用 Java 8,我发现版本 3.2.4 对我有用。