[英]Junit Mockito Mock SessionFactory into DAO Test class
我是JUnit和Mockito的新手,我想在我的DAO測試類中模擬我的SessionFactory,這是我如何繼續:
@RunWith(MockitoJUnitRunner.class)
public class TodoDaoTest {
@Mock
SessionFactory sessionFactory;
@InjectMocks
TodoDao todoDao;
@Mock
Session session;
@Mock
Query query;
@BeforeClass
public static void setUpClass(){
}
@Before
public void setUp(){
Mockito.when(query.setParameter(any(int.class), any(Object.class))).thenReturn(query);
Mockito.when(session.createQuery(any(String.class))).thenReturn(query);
Mockito.when(sessionFactory.getCurrentSession()).thenReturn(session);
MockitoAnnotations.initMocks(this);
}
@Test
public void getTodosByUserIdShouldNotReturnNull(){
User user = new User();
assertNotNull(todoDao.getTodosByUserId(user.getId()));
}
}
這是我的DAO課程
@Component
@Transactional
public class TodoDao implements ITodoDao {
@Autowired
private SessionFactory sessionFactory;
@Override
@PostFilter("filterObject.userByUserId == authenticationFacade.getAuthenticatedFacade()")
public List<Todo> getTodosByUserId(int userId) {
List todos;
todos = sessionFactory.getCurrentSession().createQuery("from Todo where userId = ?").setParameter(0, userId).list();
return todos;
}
}
但是當我運行我的測試時,我有一個java.lang.NullPointerException
異常,nullPointerException位於todos = sessionFactory.getCurrentSession().createQuery(...)
行的級別todos = sessionFactory.getCurrentSession().createQuery(...)
在測試中,如果我在Mockito.when(...).thenReturn(...)
之后放置MockitoAnnotations.initMocks(this)
,我目前已打開Mockito.when(...).thenReturn(...)
我將得到NullPointerException
。
嘗試做init然后做模擬。
我的理解是MockitoAnnotations.initMocks(this)
初始化了存根的依賴關系。 然后,這允許在存根上設置when(...).thenReturn(...)
行為。 如果您嘗試首先設置行為,那么依賴關系尚未初始化,因此會出現NullPointerException。
.createQuery(“來自Todo,其中userId =?”)方法調用返回null。 您也應該設置模擬會話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.