2009-07-20 7 views
4

Ich habe eine SortedList-Klasse erstellt, die über einen Konstruktor verfügt, der einen java.util.Comparator als Argument verwendet.Junit Inline-Komparator Initialisierungsfehler

Nach dem Ausführen von Komponententests auf meinem Rechner (durch Eclipse 3.3.0) war alles in Ordnung. Hudson beschwert sich jedoch, weil es sagt, dass es meinen Komparator nicht instanziieren kann.

Hier seinen mein einfacher Test (Schnipsel)

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()); 
     } 
} 

Oder eine alternative Art und Weise:

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

Der Fehler Hudson zeigt ist

ar.com.lib.SortedListTest $ strcmp.initializationError0

Nachricht

Fehler

Test-Klasse soll öffentliches hat Null-Argument Konstruktor

Stacktrace

java.lang.Exception: Test-Klasse soll hat öffentlichen Konstruktor ohne Argumente bei java.lang .reflect.Constructor.newInstance (Constructor.java:513) um java.lang.reflect.Constructor.newInstance (Constructor.java:513) verursacht durch: java.lang.NoSuchMethodException: ar.com.lib.SortedListTest $ strcmp() bei java.lang.Class.getConstructor0 (Class.java:2706) bei java.lang.Class.getConstructor (Klasse.. java: 1657)

Ich habe versucht, die @Ignore Annotation, aber bisher kein Glück. Es kompiliert nicht, wenn ich versuche

@Ignore class strcmp{} 

Irgendwelche Ideen werden geschätzt. Danke im Voraus.

+0

Ich sehe nicht, wie Hudson mit diesem –

+0

beteiligt ist Es ist derjenige, der sich beschweren! Der Unruhestifter. – Tom

+0

Ich bekomme das Gleiche. Tests laufen lokal unter Maven in Ordnung, scheitern aber mit diesem Fehler auf Hudson. @ Ignorieren der Klasse funktioniert auch nicht. Going JUnit 3-Stil (Erweiterung Testfall) funktioniert auch nicht. – Trenton

Antwort

0

java.lang.Exception: Test Klasse public Konstruktor ohne Argumente an

Nun haben sollte, tut Ihre Klasse mit den @Test einen öffentlichen Null-arg Konstruktor? Kann nicht sagen, ob das von dem was du gepostet hast wahr ist.

Sie können auch der inneren Klasse einen behindertengerechten Modifier geben (public, protected, etc.) zusammen mit Namen richtig (Klasse sollte mit einem Großbuchstaben beginnen). Wenn diese Klassen durch Reflektion aufgerufen werden, ist es immer möglich, dass der JUnit-Runner bestimmte Annahmen über Formatierungs- und Namensregeln trifft ...

+0

Versucht, funktioniert aber immer noch nicht – Tom

+0

Wie führt Hudson Ihre Tests durch? Durch Ant? Maven? Erhalten Sie die gleichen Fehler, wenn Sie die Tests auf die gleiche Weise in einer Konsole ausführen (d. H. Hudson aus dem Bild nehmen)? –

+0

Ich bekomme das auf einem Maven-Projekt in Hudson. Wenn ich lokal laufe, keine Fehler. – Trenton

2

Das Problem ist, dass Hudson strcmp als Testklasse sieht, die es auszuführen versucht. Die Tatsache, dass dies eine innere Klasse ist, ändert das nicht. Die Hudson-Konfiguration muss geändert werden, um diese Klasse als Testklasse auszuschließen.

Wenn Sie das nicht können, dann machen Sie strcmp eine öffentliche statische Klasse mit einem öffentlichen narags-Konstruktor und fügen Sie eine Testmethode hinzu, die nichts tut (oder das ignore-Tag auf der Klasse könnte funktionieren). Aber es wäre viel besser, wenn Sie den Testläufer dazu bringen könnten, diese Klasse überhaupt nicht als Testklasse zu wählen.

+1

Ich hatte das gleiche Problem: Genauer gesagt, musste ich mein 'run tests' Ziel ändern, um dies einzuschließen: '' – NT3RP