Я пытаюсь использовать SpringJunit4ClassRunner
для проверки своих классов DAO, не забывая о данных, когда я закончу, используя аннотацию @Transactional
. Мой класс DAO содержит (урезанный):
@Repository
public class IdsFunctionJpaController {
@PersistenceContext
EntityManager em;
public void save(IdsFunction function) {
if (function.getId() == 0) {
create(function);
} else {
update(function);
}
}
@Transactional
private void create(IdsFunction idsFunction) {
try {
em.persist(idsFunction);
}
catch (Exception e) {
System.out.println(e);
} finally {
em.close();
}
}
@Transactional
private void update(IdsFunction function) {
try {
em.merge(function);
} finally {
em.close();
}
}
}
и мой начальный тестовый блок JUnit
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/applicationContext.xml"} )
public class IdsFunctionJpaControllerTest {
@Autowired
IdsFunctionJpaController dao;
@Test
@Transactional
public void addFunction() {
IdsFunction function = new IdsFunction();
function.setDescription("Test Function Description");
dao.save(function);
assertTrue(function.getId() != 0);
}
}
То, что я пытаюсь сделать здесь, это просто проверить, что объект был создан, но этот тест не пройден. Если я удаляю аннотацию @Transactional
, то тест проходит, но тестовый объект остается в базе данных. Что я делаю не так?
Привет