DBUnit은 메모리 데이터베이스를 채우는 데 도움이되지만 내 지식으로 결과 세트를 제공하지 않습니다.
나는이 시점에서 조롱 프레임 워크가 잘못된 접근이라고 말합니다. 조롱은 단순히 데이터를 반환하는 것이 아니라 행동과 상호 작용을 테스트하는 것이므로 사용자의 의도대로 진행될 것입니다.
대신 결과 세트 인터페이스를 구현하거나 전체 결과 세트를 구현하지 않고도 관심있는 메소드를 구현하는 클래스에 대한 결과 세트 인터페이스의 동적 프록시를 작성합니다. 메모리 데이터베이스를 유지하는 것만 큼 쉽게 클래스를 유지 관리 할 수 있습니다 (테스트중인 데이터 집합이 일관성이 있다면). 디버깅이 더 쉬울 것입니다.
dbunit을 사용하여 결과 집합의 스냅 샷을 찍은 DBUnit을 사용하여 해당 클래스를 백업하고 dbunit에서 테스트 중에 xml에서 다시 읽게하고 더미 결과 집합에서 dbunit 클래스의 데이터를 읽게 할 수 있습니다. 데이터가 약간 복잡하다면 합리적인 방법이 될 것입니다.
클래스가 이렇게 결합되어 동일한 테스트의 일부로 수정 된 데이터를 읽어야 할 경우 메모리 데이터베이스를 가져갈 것입니다. 그럼에도 불구하고, 나는 당신이 그 의존성을 떼어 낼 때까지 실제 데이터베이스의 사본을 사용하는 것을 고려할 것이다.
간단한 프록시 생성 방법 :
private static class SimpleInvocationHandler implements InvocationHandler {
private Object invokee;
public SimpleInvocationHandler(Object invokee) {
this.invokee = invokee;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
method = invokee.getClass().getMethod(method.getName(), method.getParameterTypes());
if (!method.isAccessible()) {
method.setAccessible(true);
}
try {
return method.invoke(invokee, args);
} catch (InvocationTargetException e) {
throw e.getTargetException();
}
}
}
public static <T> T generateProxy(Object realObject, Class... interfaces) {
return (T) Proxy.newProxyInstance(realObject.getClass().getClassLoader(), interfaces, new SimpleInvocationHandler(realObject));
}
안녕하세요. Yishai 님, 의견을 보내 주셔서 감사합니다. 필자는 10 개 이상의 테스트 각각에 대해 약 100 개의 레코드를 조롱하며 기록은 10 개의 필드로 구성됩니다. 이 AFAIU는 파일 및 사용자 정의 ResultSet 구현에 데이터를 저장하기 위해 DBUnit을 남겨 둡니다. 응답 해 주셔서 다시 한 번 감사드립니다. – DiaWorD
당신은 오신 것을 환영합니다. 나는 각각의 10 가지 테스트가 각각 다른 데이터를 필요로한다면 그렇다고 합리적 접근법이라고 말할 수 있습니다. DBUnit을 사용하면 ResultSet을 가져 와서 XML에 쓸 수 있으므로 테스트에서 참조 할 수 있습니다. – Yishai