2011-11-15 6 views
2

롤백 동작을 확인하기 위해 저장이 수행 된 후에 예외가 DAO에 적용되는 통합/단위 테스트를 작성하려고합니다. 내 생각은 봄 AOP 측면을 만들고 DAO의 'save'메소드에 @AfterReturning advice를 적용하는 것이었다.롤백 테스트 방법이 예상대로 작동합니까?

DAO는 @Transactional advice를 통해 이미 프록시 처리됩니다.

이것이 올바른 방법 인 것 같습니다.

지금까지 Spring ProxyFactory를 사용하여 - 단위 테스트에서 DAO를 프록시 처리하려고합니다.

예.

ProxyFactory pf = new ProxyFactory(new MyFaultInjectingAspect()); 
pf.setTarget(myDao); 
MyDao proxiedDao = (BookmarkDao) pf.getProxy(); 

감사합니다.

는 참고 : 관련이 Is it ok to use DataSourceTransactionManager for ORM persistence instead of HibernateTransactionManager?이 비슷한 일을하려고하는 것 같습니다

+1

트랜잭션이 실패하여 롤백이 발생하는 메커니즘이 있습니까? 테스트를 통해이 실패를 설정할 수있는 방법이 있습니까? –

+0

질문은 그 메커니즘을 만드는 방법과 관련이 있습니다. 내가 실패를 일으키는 예외를 주입하는 측면을 사용하는 것을 고려 중입니다. –

답변

1

내가 다른 방법은 어떤 AOP 않고있다 같아요 아무것도 DB에 기록되지 않습니다 정말 검사 :

당신이 확인하는 시험이있는 경우 트랜잭션이 커밋된다 (예외가없는 경우) 엔티티가 DB에 기록되면 간단한 두 번째 테스트 만 필요합니다.

이 테스트에서는 예외는 있지만 예외를 수행해야합니다. 그리고 당신은 그 표기가 DB에 기록되었는지를 확인해야합니다. 따라서 AOP 자료가 필요하지 않으며 실제로 테스트하려는 내용이 결국 테스트되기 때문에 테스트가 더 의미있게됩니다. (잘 알고 있겠지만 롤백은 데이터베이스 변경을 막는 기술 일뿐입니다.)

+0

+1. 제안 해 주셔서 감사합니다. 나는 롤백을 확인하려고 실제로 노력 중이다. 하지만 아마도 테스트는 너무 복잡한 것입니다. 다른 접근법을 시도해 볼 수도 있습니다. –

관련 문제