AbstractTransactionalJUnit4SpringContextTests 기본 클래스를 사용하여 통합 테스트를 설정하려고합니다. 내 목표는 간단합니다 : simpleJdbcTemplate을 사용하여 데이터베이스에 데이터를 삽입하고, DAO를 사용하여 데이터를 다시 읽은 다음 다시 롤백합니다. JPA -> Hibernate는 영속 계층이다.AbstractTransactionalJUnit4SpringContextTests : 삽입 된 데이터를 찾기 위해 DAO를 가져올 수 없습니다.
제 테스트를 위해 외래 키가없는 버전의 데이터베이스를 만들었습니다. 이렇게하면 각 테스트의 조명기 설치량을 줄여서 테스트 속도를 높일 수 있습니다. 이 단계에서는 DB 무결성을 테스트하는 데 관심이 없으며 HQL의 비즈니스 로직 만 테스트합니다.
/* DAO */
@Transactional
@Repository("gearDao")
public class GearDaoImpl implements GearDao {
@PersistenceContext
private EntityManager entityManager;
/* Properties go here */
public Gear findById(Long id) {
return entityManager.find(Gear.class, id);
}
}
/* Test Page */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/com/dom/app/dao/DaoTests-context.xml"})
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=false)
public class GearDaoImplTests extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
private GearDao gearDao;
@Test
@Rollback(true)
public void quickTest() {
String sql;
// fields renamed to protect the innocent :-)
sql = "INSERT INTO Gear (Gear_Id, fld2, fld3, fld4, fld5, fld6, fld7) " +
" VALUES (?,?,?,?,?,?,?)";
simpleJdbcTemplate.update(sql, 1L, 1L, 1L, "fld4", "fld5", new Date(), "fld7");
assertEquals(1L, simpleJdbcTemplate.queryForLong("select Gear_Id from Gear where Gear_Id = 1"));
System.out.println(gearDao);
Gear gear = gearDao.findById(1L);
assertNotNull("gear is null.", gear); // <== This fails.
}
}
응용 프로그램 (스프링 MVC 사이트)은 DAO와 잘 작동합니다. 무슨 일이 일어날 수 있니? 그리고 내가 어디에서 해결책을 찾기 시작할 것인가?
- DAO를 어떻게 든 인 SimpleJdbcTemplate는 다른 데이터 소스를 가지고있다. DaoTests-context.xml 파일에 하나의 dataSource가 정의되어 있기 때문에 어떻게 될지 모르겠습니다.
- Hibernate는 Gear 객체를 선택하기 위해 모든 외래 키 관계가 존재해야한다. fld2/fld3/fld4에서 하드 코딩하고 있기 때문에 존재하지 않는 몇 가지 조인이 있습니다.
- DAO는 커밋되지 않은 데이터에 대해 작동하지 않습니다.하지만 왜 simpleJdbcTemplate이 이것을 존중합니까? 둘 다 똑같은 일을한다고 가정합니다.
- 팬티 놈들.하지만 이익은 어디입니까?
이 게시물은 영감을 줄 수도 있습니다. http://stackoverflow.com/questions/3891624/migrating-junit-jpa-tests-from-spring-2-5-5-to-spring-3-0-4 – hoymkot