2014-12-14 2 views
2

jOOQ 3.5.0jOOQ : DAO 객체를 조롱하다

현재 jOOQ 생성 DAO 객체를 사용하는 리소스에 대한 단위 테스트를 작성하려고합니다.

DAO 계층 구조의 기본 클래스 (DAOImpl) 중 하나가 모방에 불친당하게 만드는 많은 final 메서드를 가지고 있음을 알았습니다. (솔루션으로 Powermock과 같은 바이트 코드 조작기는 제외합니다). 현재 MockConnectionMockDataProvider 패턴을 사용하여 DAO를 채우고 있지만 DAO 메소드 호출을 선언하기에는 약간 낮은 것처럼 보입니다.

예를 들어, 내 리소스는 FooDao.createFoo(foo)이고 테스트의 요지는 MockDataProvider.execute(...)이며 원시 SQL과 바인딩 개체 배열 값을 가진 컨텍스트 개체를 제공합니다.

create이 호출되었다는 것을 테스트에 알리기 위해서는 원시 SQL을 평가해야합니다. DAO가 훌륭하고 유창한 방법을 주장 할 때 이와 같은 일을하는 것은 낭비입니다.

내 질문은 : 거기에 단위 테스트 DAO 사용하는 더 나은 방법은 무엇입니까? 나는 간단한 계약을 테스트하기 위해 보일러 플레이트 많이 필요 같은

FooDao fooDao = createMock(FooDao.class); 
.... 
when(fooDao.fetchById(id)).thenReturn(foo); 

훨씬 더 바람직 example in the docs하는 것입니다 .... 보인다.

+0

당신이 Powermock를 사용하여 무엇 유지? –

+0

또는 DAOImpl 대신에 ['DAO'] (http://www.jooq.org/javadoc/3.5.x/org/jooq/DAO.html)를 사용하고 인터페이스를 프로그래밍 (즉 모의) 할 수 있습니까? ? – Xaerxess

+0

@Xaerxess'FooDao'와'DAO' 사이에 너무 많은 세부 사항이 있습니다. 이것은 모든 DAO가 깨끗한 테스트를 작성할 수 있도록 나를위한 보일러 플레이트가 많이 있다는 것을 의미합니다. – markdsievers

답변

1

지금 당장은 그 방법을 오버라이드하기 위해 바이트 코드에서 final을 제거하는 PowerMock과 같은 것을 사용하지 않고 jOOQ DAO를 모의하기가 어려울 것입니다.

곧 출시 될 jOOQ 3.6에서는 DAO 용 인터페이스 코드 생성을 구현할 계획입니다. 그것들은 조롱하기가 더 쉬울 것입니다.

은 참조 : https://github.com/jOOQ/jOOQ/issues/3868