2010-07-20 3 views
4

junit에서 행 잠금 예외를 테스트하는 방법이 있습니까? 이 같은junit에서 행 잠금 예외를 테스트하는 방법

+1

제공된 정보는 질문에 대답하기에 충분하지 않습니다. 동작은 JDBC 드라이버에 종속적 일 수 있습니다. 모든 RDBMS가 단위 테스트 등에 적합하지는 않습니다. – 01es

+0

이 질문은 정확히 테스트해야하는 대상에 대해 다소 모호합니다. DB가 예외를 throw하는지 테스트 하시겠습니까? 앱이 예외 상황에 적절히 반응하는지 테스트 중입니까? –

답변

6

데이터베이스 종속성이 mock 인 경우 모의 객체가 잠긴 행 예외를 던질 수 있습니다.

데이터베이스에 대한 직접적인 종속성을 제거 했으므로 테스트가 더 빨리 실행되어야하며 데이터베이스가 사용 가능하지 않거나 이와 유사한 데이터베이스 문제로 인해 "깜박임 테스트"가 발생하지 않을 것입니다 .

또한이 방법으로 코드를 테스트하고 데이터베이스와는 아무런 관련이 없습니다. 구현에 독립적입니다. 앞으로 데이터베이스 공급 업체를 변경해야하는 경우이 (a)은 코드와 상관 없으며 (b) 테스트는 사용중인 데이터베이스를 신경 쓰지 않습니다.

당신이 얻을 수있는 프레임 워크를 조롱하는 몇 가지 예는 시작 :

5

뭔가 :

@Test(expected=SQLException.class) 
public void testReadLockedRowException() { 
    ... 
} 
3

게오르기은 정확하지만 당신은 더 많은 구현에 필요합니다 : 두 클라이언트를 데이터베이스에 액세스 할 수 있습니다. 한 행을 읽고 행에 매달 려야하며, 다른 행은 액세스하고 예외를 생성합니다.

+1

두 스레드가 필요하지 않습니다. 두 건의 거래로 충분할 것입니다. (연결 당 트랜잭션 시나리오를위한 두 개의 연결) –

1

를 mock 객체로, 당신의 모의 DB에서 행 잠금 예외를 throw합니다. 실제 DB와

:

  1. 열기 두 DB 세션 충돌 모드에서 세션이 액세스 잠긴 행에서
  2. 세션 1
  3. 년 전에 그것을 해제하지 않고 세션 1 잠금 흥미 행에서
관련 문제