문제

는 내가 본 @Transactional 은 더 나은 위치에서 서비스하지만 문제는 나지 않을 시험할 수 있는 내소기 때문에 정확하게 변경되지 않은 투입된다.

테스트할 때 저장소 save() 방법을 사용하고 싶 find() 하십시오 엔터티를 올바르게 저장하기 때문에 그러 save() 변경되지 않은 투입된 데이터베이스 find() 는 null 을 반환합니다.

유일한 솔루션이 나오는 추가 @Transactional 주석:

  • 에 저장소 save() 방법
  • testSave() method=>지만 IMO 이것은 잘못이기 때문에 그것은 동작을 수정

어쩌면 내가 오해 뭔가를 배우기 시작 Java 니다.

도움이 되었습니까?

해결책

당신이 필요로 하지 않는 변경을 위해 각 데이터베이스에만 필요한 쿼리를 실행에서 같은 트랜잭션이 있습니다.다음을 사용하지 않아야 같은 방법으로는 데이터를 저장하여 데이터를 검색합니다.기본적으로 사용해야 합니다 일반 jdbc 을 테스트하는 경우 추가되었습니다.

public class TestClass extends AbstractTransactionalSpringJUnit4ContextTests {

    private TestRepository repo; 

 @Test
 public void testSave() {
    int rowCount = countRowsInTable("your-table-name");
    repo.save(yourEntity);
    repo.flush(); 
    int rowCountAfter = countRowsInTable("your-table-name");
    assertTrue(rowCountAfter - rowCount == 1); // Or whatever you like to verify the row was added 
 }

참고:지 않은 경우 확장 JpaRepository 이 없 flush 방법 대신에 삽입할 수 있습니다 EntityManager 에서 테스트 케이스와 통화 flush 습니다.

대신 테스트 행의 수 있도를 사용하여 jdbcTemplateAbstractTransactionalJunit4SpringContextTests 를 검색하는 새로 추가되는 행와 비교 당신이 무엇을 것으로 예상됩니다.

다른 팁

그런 이유로 당신은 시작할 것을 테스트 단위 테스트를 작성하여 쓰는 동안 생산 코드입니다.하지만 당신은 배우기 시작했 Java 이틀 전에 당신은 정말을 얻으로 트랜잭션 관리 right off the bat.기초 학습과 디자인이 처음이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top