Wie benutze ich einen JUnit Parametrisierte Läufer mit einer varargs-Konstruktor?
Schrieb ich ein mockup Beispiel um dies zu verdeutlichen, ohne dass alles vertraulich behandelt. Es ist ein "dummy" - Beispiel, das nichts tut, aber das problem tritt in der test-initialiser.
@RunWith(Parameterized.class)
public class ExampleParamTest
{
int ordinal;
List<String> strings;
public ExampleParamTest(int ordinal, String... strings)
{
this.ordinal = ordinal;
if (strings.length == 0)
{
this.strings = null;
}
else
{
this.strings = Arrays.asList(strings);
}
}
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{0, "hello", "goodbye"},
{1, "farewell"}
});
}
@Test
public void doTest() {
Assert.assertTrue(true);
}
}
Grundsätzlich habe ich eine test-Konstruktor akzeptiert mehrere Argumente für eine lokale Liste Variablen und ich möchte diese bevölkern, durch eine Reihe initialiser. Die test-Methode mit der local-Liste-variable korrekt - ich habe entfernt diese Logik zu vereinfachen, ist der test.
Wenn ich dies Schreibe, meine IDE hat keine Beschwerden über die syntax und die test-Klasse baut ohne Fehler bei der Kompilierung. Aber wenn ich es laufen lasse, bekomme ich:
doTest[0]:
java.lang.IllegalArgumentException: wrong number of arguments
at java.lang.reflect.Constructor.newInstance(Unknown Source)
doTest[1]:
java.lang.IllegalArgumentException: argument type mismatch
at java.lang.reflect.Constructor.newInstance(Unknown Source)
Was genau schief gegangen ist, hier, und wie ich die richtig verwenden dieses Muster?
- Was ist doTest und welche Daten hat das Netz?
- In diesem Beispiel doTest ist nur ein dummy-test zu ermöglichen, diese testsuite zur Ausführung in JUnit. Das problem ist nicht in den test-code, wie Sie sehen werden, wenn Sie versuchen, führen Sie diesen test so wie es da steht; trotz der Tatsache, dass es einem fast leeren test-Körper, die es immer noch nicht laufen aufgrund der oben genannten Initialisierung Fehler.
- Ich fügte hinzu, ein Teil der stacktrace, den ich sehe, wenn ich mit Ihr testen, um deutlich zu machen, dass der Fehler passiert, wenn die varargs-Konstruktor aufgerufen wird. Wenn das anders aus, was Sie sehen, fühlen Sie sich frei, es zu ändern oder verwerfen es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann nicht testen Sie es jetzt, aber ich denke, wenn man sich auf eine Methode oder einen Konstruktor mit Variablen Argumenten, die Sie haben, um es aufzurufen mit einem array statt einer Variablen Liste von Werten.
Wenn ich Recht hab, dann sollte das klappen:
Eine Erklärung
Auf dem source-code-Ebene, können wir schreiben
Der compiler wandelt diese in ein array von Strings. JUnit verwendet die Reflexion und invocation-API, und aus dieser Perspektive, die Konstruktoren Signatur ist
So zu den Konstruktur aufrufen - und das ist es, was JUnit tut, innerlich haben Sie, um eine integer-und eine String-array.