2013-02-13 3 views
0

Java에서 사용할 수있는 CodeModel을 사용하여 복잡한 코드 생성 작업을하고 있습니다. 나는 단위 테스트를 그런 식으로 설정하여 작지만 기능적으로 완벽한 Java 코드를 생성하여 메모리에서 컴파일되고 생성 된 클래스가 메모리에서로드되도록합니다. 생성 된 코드를 출력하지 않으면 일반적으로 모든 것이 빠르다.어설 션 실패시 발사 기능

생성자 코드는 생성 된 클래스를 인식하지 못하므로 생성 된 클래스에서 리플렉션을 사용하여 잘 작동하는 메서드를 호출합니다. 이러한 메서드는 또한 리플렉션을 사용하여 메서드가 개체의 상태를 확인하여 예상 된 작업을 수행했는지 확인하는 데 실패 할 수 있습니다.

제 문제는 테스트가 실행될 때마다 생성 된 코드를 기록하고 싶지 않다는 것입니다. 하지만 테스트가 실패하면 생성 된 코드를보고 싶습니다. 많은 테스트가 있습니다. infintest를 사용하기 때문에, 무한 테스트가 여러 테스트의 결과를 축적하기 때문에 내 일식이 느려집니다.

테스트에 실패하면 내 기능을 호출하도록 junit을 설정할 수 있습니까? 예 :

boolean compileSuccessful = compile(); 
Assert.assertTrue("Ooops, you generated bad code", compileSuccessful); 

위의 어설 션이 실패하면 생성 된 코드를 출력하고 잘못된 내용을 확인하고자합니다.

답변

1

생성 된 코드를 실패한 테스트 출력에 추가하는 TestRule을 사용할 수 있습니다. 나는 TestWatcher.

public class GeneratedCodeLogger extends TestWatcher { 
    private Logger log; 

    public GeneratedCodeLogger(Logger log) { 
    this.log = log; 
    } 

    @Override 
    protected void failed(Description d) { 
    System.out.println(log.toString()); 
    } 
} 

귀하의 테스트가이 규칙을 사용하고 로거에 생성 된 코드를 기록하는 확장하는 것이 좋습니다.

+0

완벽합니다. 매력처럼 일했습니다. 고맙습니다. – user937720