Junit-inline-Komparator Initialisierung Fehler
Ich habe eine SortedList-Klasse, die einen Konstruktor ein java.util.Comparator als argument.
Nach dem ausführen von Unit tests auf meinem Rechner (über eclipse 3.3.0) war alles OK. Allerdings Hudson Beschwerden, weil es sagt, es kann nicht instanziiert meine Komparator.
Hier sein mein einfachen test (Ausschnitte)
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 einen alternativen Weg:
public void testAdd(){
SortedList<String> list = new SortedList<String>(new Comparator<String>(){
public int compare(String s1,String s2){
return s1.compareTo(s2);
}
});
}
Den Fehler Hudson zeigt, ist
ar.com.lib.SortedListTest$strcmp.initializationError0
Fehlermeldung
Test Klasse sollte public-null-argument-Konstruktor
Stacktrace
java.lang.Ausnahme: Test-Klasse
öffentliche null-argument-Konstruktor
bei
java.lang.reflektieren.Konstruktor.newInstance(Constructor.java:513)
bei
java.lang.reflektieren.Konstruktor.newInstance(Constructor.java:513)
Verursacht durch:
java.lang.NoSuchMethodException:
ar.com.lib.SortedListTest$strcmp.()
bei
java.lang.Klasse.getConstructor0(Klasse.java:2706)
bei
java.lang.Klasse.getConstructor(Class.java:1657)
Ich ve versucht, mit @Ignore-annotation, aber kein Glück so weit. Es wird nicht kompiliert wenn ich versuche
@Ignore class strcmp{}
Alle Ideen werden geschätzt. Vielen Dank im Voraus.
Es ist der einzige, der beschwert sich! Die Ursache des Problems.
Ich bin immer der gleiche. Tests lokal ausführen unter Maven in Ordnung, aber mit diesem Fehler fehlschlagen, auf der Hudson. @Ignore ' Ing die Klasse funktioniert auch nicht. Gehen JUnit-3-Stil (Erweiterung der TestCase) funktioniert auch nicht.
Hinzugefügt hudson-tag, da dieses eine Interaktion zwischen diesem container und junit.
InformationsquelleAutor Tom | 2009-07-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass Hudson zu sehen, strcmp, wie eine test-Klasse, die er versucht zu laufen. Die Tatsache, dass dies ist eine innere Klasse nicht ändern. Die Hudson-Konfiguration geändert werden muss, um auszuschließen, die diese Klasse als eine test-Klasse.
Wenn Sie dies nicht tun können, dann machen strcmp eine öffentliche statische Klasse mit einer öffentlichen noargs Konstruktor und fügen Sie eine test-Methode ist es, die nichts tut (oder die ignore-tag auf die Klasse Arbeit). Aber es wäre viel besser, wenn Sie könnte den test-runner nicht wählen, dass die Klasse sich als eine test-Klasse überhaupt.
<exclude name="**/*$*.class" />
InformationsquelleAutor Yishai
Gut, hat Sie Ihre Klasse mit der
@Test
eine öffentliche null-arg-Konstruktor? Kann nicht sagen, ob dies wahr ist von dem, was du gepostet hast.Möglicherweise möchten Sie auch auf die richtige innere Klasse eine Erreichbarkeit Modifikatorname (
public
,protected
usw.) zusammen mit dem Namen ist es richtig (Klasse sollte beginnen mit einem Großbuchstaben). Wenn diese Klassen sind aufgerufen, durch Reflexion, es ist immer möglich, dass der JUnit-runner macht bestimmte Annahmen über die Formatierung und den Regeln zur Namensgebung...Wie funktioniert Hudson ausführen der tests? Durch Ant? Maven? Bekommen Sie die gleichen Fehler beim ausführen der tests in der gleichen Weise in einer Konsole (also unter Hudson aus dem Bild)?
Bekomme ich diese auf ein Maven-Projekt in Hudson. Wenn ich lokal ausgeführt, keine Fehler.
InformationsquelleAutor matt b