2009-07-20 5 views
4

java.util.Comparator를 인수로 사용하는 생성자가있는 SortedList 클래스를 만들었습니다.Junit 인라인 비교기 초기화 오류

내 컴퓨터에서 단위 테스트를 실행 한 후 (eclipse 3.3.0을 통해) 모든 것이 정상이었습니다. 그러나 Hudson은 내 비교자를 인스턴스화 할 수 없다고 말하여 불만을 제기합니다. 여기

의 내 간단한 테스트 (조각)

public class SortedListTest { 

    class strcmp implements Comparator<String>{ 
     public strcmp(){} 

     public int compare(String s1,String s2){ 
      return s1.compareTo(s2); 
     } 
    } 
    @Test 
    public void testAdd(){ 
     SortedList<String> list = new SortedList<String>(new strcmp()); 
     } 
} 

또는 다른 방법 :

public void testAdd(){ 
     SortedList<String> list = new SortedList<String>(new Comparator<String>(){ 
      public int compare(String s1,String s2){ 
       return s1.compareTo(s2); 
      } 
     }); 
} 

허드슨 보여줍니다 오류가

ar.com.lib.SortedListTest $ strcmp.initializationError0

오류 메시지

테스트 클래스는, 인수를 가지지 않는 public 생성자

스택 트레이스를해야

의 java.lang.Exception : 테스트 클래스는 가 java.lang의에서 공공 제로 인수 생성자 을 가져야한다 .reflect.Constructor.newInstance (Constructor.java:513) at java.lang.reflect.Constructor.newInstance (Constructor.java:513) 원인 : java.lang.NoSuchMethodException : ar.com.lib.SortedListTest $을 strcmp ( java.lang.Class.getConstructor (클래스에서 java.lang.Class.getConstructor0 (Class.java:2706) 에서) .. java : 1657)

@Ignore 주석을 사용하여 시도했지만 지금까지는 행운이 없습니다. 내가 할 때 컴파일 실 거예요

@Ignore class strcmp{} 

어떤 아이디어를 바랍니다. 미리 감사드립니다.

+0

허드슨이이 문제와 어떻게 관련되어 있는지 알지 못합니다. –

+0

불평하는 사람이 있습니다! 말썽 꾸러기. – Tom

+0

나는 똑같은 것을 얻고있다. 테스트는 Maven에서 로컬로 실행되지만 허드슨에서는이 오류와 함께 실패합니다. @ Ignore'ing 클래스도 작동하지 않습니다. JUnit 3 스타일 (TestCase 확장)이 작동하지 않습니다. – Trenton

답변

0

의 java.lang.Exception : 테스트 클래스는

음에 인수를 가지지 않는 public 생성자가 있어야의 @Test와 클래스는 공공 제로 인수 생성자를 가지고있다? 게시 한 내용에서 이것이 사실인지 여부를 알 수 없습니다.

내부 클래스에 접근성 수정 자 (public, protected 등)를 올바르게 지정하고 클래스 이름에 대문자로 시작해야 할 수도 있습니다. 이러한 클래스가 리플렉션에 의해 호출되는 경우 항상 JUnit 러너가 규칙을 지정하고 이름을 지정하는 것에 대해 특정 가정을 할 수 있습니다 ...

+0

시도했지만 여전히 작동하지 않습니다. – Tom

+0

허드슨은 테스트를 어떻게 실행합니까? 개미를 통해? 메이븐? 콘솔에서 같은 방식으로 테스트를 실행하면 동일한 오류가 발생합니까 (예 : 허드슨을 사진에서 제외)? –

+0

허드슨의 Maven 프로젝트에서이 사실을 알게되었습니다. 로컬에서 실행할 때 오류가 없습니다. – Trenton

2

문제는 허드슨이 실행하려고하는 테스트 클래스로 strcmp를보고 있다는 것입니다. 이것이 내부 클래스라는 사실은 그것을 변경하지 않습니다. 이 클래스를 테스트 클래스로 제외하려면 허드슨 구성을 변경해야합니다.

그렇게 할 수 없다면 strcmp를 public noargs 생성자를 사용하여 public static 클래스로 만들고 아무것도 수행하지 않는 테스트 메소드를 추가하십시오 (또는 클래스의 ignore 태그가 작동 할 수도 있음). 그러나 테스트 주자가 테스트 클래스로 클래스를 선택하지 못하게하면 훨씬 더 좋습니다.

+1

나는 동일한 문제가있다 : 구체적으로, 나는 이것을 포함하도록 나의 'run tests'목표를 변경해야만했다 :'' – NT3RP