Я новичок в JUnit и Mockito, и я хочу издеваться над моей SessionFactory внутри моего тестового класса DAO, вот как я продолжаю:
@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(...)
В тесте, который у меня сейчас открыт, я поставлю MockitoAnnotations.initMocks(this)
после, Mockito.when(...).thenReturn(...)
я получу NullPointerException
.
Попробуйте выполнить init, а затем mocks.
Насколько я понимаю, это MockitoAnnotations.initMocks(this)
инициализирует заглушенные зависимости. Затем это позволяет when(...).thenReturn(...)
настроить поведение на заглушках. Если вы попытаетесь сначала настроить поведение, то зависимости еще не инициализированы и, следовательно, возникнет исключение NullPointerException.
В javadoc mockito есть небольшое описание
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения