Существует объект домена Hibernate с полем «не null», имеющим аннотацию @Column(nullable=false)
, метод класса DAO, который сохраняет этот объект в БД.
Я издеваюсь над вызовом create DAO, используя PowerMockito
, фиктивный вызов работает нормально, но если я передаю значение null для поля, фиктивный тест не выдает ошибку, что поле равно null.
Ниже приведен код, инструменты/технологии (java, spring, hibernate, sqlserver, junits, powermockit). Пропущено несколько изменений кода, связанных с контекстом Spring и конфигурациями сеанса гибернации.
public class Entity{
private String id;
@Column(nullable=false)
private String field;
//setters and getters goes here
}
public class HibernateDAO{
private SessionFactory sessionFactory;
public void create(Entity entity){
getSession().save(entity);
}
public void setSessionFactory(SessionFactory sf){
sessionFactory = sf;
}
}
public class HibernateDAOTest{
HibernateDAO hibernateDAO = new HibernateDAO();
public SessionFactory mockedSessionFactory;
public Session mockedSession;
public Query query;
public SQLQuery sqlQuery;
public Transaction mockedTransaction;
@Before
public void setup() {
mockedSessionFactory = PowerMockito.mock(SessionFactory.class);
mockedSession = PowerMockito.mock(Session.class);
mockedTransaction = PowerMockito.mock(Transaction.class);
query = PowerMockito.mock(Query.class);
sqlQuery = PowerMockito.mock(SQLQuery.class);
PowerMockito.when(mockedSessionFactory.openSession()).thenReturn(mockedSession);
PowerMockito.when(mockedSessionFactory.getCurrentSession()).thenReturn(mockedSession);
PowerMockito.when(mockedSession.beginTransaction()).thenReturn(mockedTransaction);
}
@Test
public void testCreate(){
Entity entityToSave = new Entity();
entityToSave.setId("123");
entityToSave.setField(null);
hibernateDAO.setSessionFactory(mockedSessionFactory);
hibernateDAO.create(entityToSave);//this call should throw error that "field" is null but its not.
}
}