문제

작업을 확장하는 사용자 정의 개미 작업을 작성하고 있습니다. 작업에서 log () 메소드를 사용하고 있습니다. 내가하고 싶은 것은 작업을 조사하는 동안 단위 테스트를 사용하는 것입니다. 그러나 작업이 개미에서 실행중인 것처럼 작업을 초기화하기 위해 작업을 실행할 컨텍스트를 설정하는 방법을 모르겠습니다.

이것은 사용자 정의 작업입니다.

public class CopyAndSetPropertiesForFiles extends Task {
    public void execute() throws BuildException {
        log("CopyAndSetPropertiesForFiles begin execute()");

        log("CopyAndSetPropertiesForFiles end execute()");
    }
}

이것은 단위 테스트 코드입니다.

CopyAndSetPropertiesForFiles task = new CopyAndSetPropertiesForFiles();
task.execute();

코드가 테스트로 실행되면 log를 호출 할 때 nullPointerException을 제공합니다.

java.lang.NullPointerException
    at org.apache.tools.ant.Task.log(Task.java:346)
    at org.apache.tools.ant.Task.log(Task.java:334)
    at uk.co.tbp.ant.custom.CopyAndSetPropertiesForFiles.execute(CopyAndSetPropertiesForFiles.java:40)
    at uk.co.tbp.ant.custom.test.TestCopyAndSetPropertiesForFiles.testCopyAndSetPropertiesForFiles(TestCopyAndSetPropertiesForFiles.java:22)

컨텍스트 나 스터브 또는 작업과 유사한 것을 제공하는 방법을 아는 사람이 있습니까?

감사,

롭.

Abarax의 답변. task.setProject (new Project ())을 호출 할 수있었습니다. 코드는 이제 OK를 실행합니다 (TH 콘솔에 로깅이 나타나지 않는 경우는 제외하고 적어도 코드를 연습 할 수 있습니다 :-)).

도움이 되었습니까?

해결책

개미 소스 코드를 살펴보면 두 가지 관련 클래스입니다. ProjectComponent 그리고

작업에서 로그 메소드를 호출합니다.

public void log(String msg) {
     log(msg, Project.MSG_INFO);
}

전화 :

public void log(String msg, int msgLevel) {
  if (getProject() != null) {
    getProject().log(this, msg, msgLevel);
  } else {
    super.log(msg, msgLevel);
  }
}

프로젝트 세트가 없으므로 "super.log (msg, msglevel)"이라고 부릅니다.

public void log(String msg, int msgLevel) {
  if (getProject() != null) {
     getProject().log(msg, msgLevel);
  } else {
    // 'reasonable' default, if the component is used without
    // a Project ( for example as a standalone Bean ).
    // Most ant components can be used this way.
    if (msgLevel <= Project.MSG_INFO) {
      System.err.println(msg);
    }
  }
}

이것이 당신의 문제인 것 같습니다. 작업에는 프로젝트 컨텍스트가 필요합니다.

다른 팁

또는 더 나은 방법으로 작업 내부의 논리에서 작업 객체 자체를 분리하여 자신의 종속성 (예 : Logger)을 전달할 수 있도록하십시오. 그런 다음 작업 객체를 테스트하는 대신 로거에서 전달할 수있는 TaskImpl-> 및 작업을 수행해야 할 다른 이상한 비트와 조각을 테스트합니다. 그런 다음 단위 테스트는 종속성을 조롱하는 문제입니다.

Ant는 Junit TestCase 클래스를 확장하는 BuildFileTest라는 편리한 클래스를 가지고 있습니다. 이를 사용하여 빌드 파일에서 개별 대상의 동작을 테스트 할 수 있습니다. 이것을 사용하면 모든 성가신 맥락을 처리합니다.

거기에 작업을 테스트하십시오 이를 설명하는 Apache Ant Writing Tasks 튜토리얼의 장.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top