簡體   English   中英

Junit Mockito模擬SessionFactory進入DAO Test類

[英]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。

mockitojavadoc中有一些描述

.createQuery(“來自Todo,其中userId =?”)方法調用返回null。 您也應該設置模擬會話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM