2010-12-29 6 views
22

Ich habe für JUnit-Testfall gegoogelt, und es kommt mit etwas, das viel komplizierter zu implementieren sucht - wo Sie eine neue Klasse erstellen, den Testfall erstreckt, die Sie dann rufen:Gibt es ein JUnit, das dem Testcase-Attribut von NUnit entspricht?

public class MathTest extends TestCase { 
    protected double fValue1; 
    protected double fValue2; 

    protected void setUp() { 
     fValue1= 2.0; 
     fValue2= 3.0; 
    } 
} 

public void testAdd() { 
    double result= fValue1 + fValue2; 
    assertTrue(result == 5.0); 
} 

aber was ich will, ist etwas wirklich einfach, wie die NUnit Testfälle

[TestCase(1,2)] 
[TestCase(3,4)] 
public void testAdd(int fValue1, int fValue2) 
{ 
    double result= fValue1 + fValue2; 
    assertIsTrue(result == 5.0); 
} 

gibt es eine Möglichkeit, dies in JUnit zu tun?

+2

JUnit hat zwei Arten: Version 3, die Sie in Ihrem Beispiel haben und die Version 4, die Anmerkungen verwendet. Möchtest du wirklich über Version 3 wissen? – Raedwald

+0

Ah .. Nein ... Ich möchte über 4.5 wissen ... – Steph

+1

Ich denke, was ich suchen könnte, ist parametrisierte Tests. Aber selbst das sieht ein wenig ausschweifend und ein bisschen zufällig aus ... http://www.mkyong.com/unittest/junit-4-tutorial6-parameterized-test/ – Steph

Antwort

2

Es ist albern, aber hier ist die Problemumgehung, die ich am Ende habe. Verwenden Sie 4 Zeilen statt einer Zeile.

@Test 
public void testAdd1() { 
    testAdd(1,2); 
} 
@Test 
public void testAdd2() { 
    testAdd(3,4); 
} 
private void testAdd(int fValue1, int fValue2) 
{ 
    double result= fValue1 + fValue2; 
    assertIsTrue(result == 5.0); 
} 
6

Es könnte sich auch lohnen, JUnit Theories and Datapoints zu überprüfen. Sie können Sie Tests parametrisieren, aber führen Sie eine Kombination aller Paare auf Ihre Eingaben.

+0

Dies sieht wie die Antwort am nächsten zu den Anforderungen. –

10

Offenbar ist die richtige Antwort "Nein, es gibt kein Äquivalent." Und das ist traurig.

JUnit parametrisierte Tests und Theorien (wie hier und in JUnit - How to test a method with different values? erwähnt) können beide die Arbeit erledigen, aber nirgendwo fast so sauber. Sie sind leider kompliziert zu schreiben und schwer zu lesen.

Ich hoffe, dass JUnit eines Tages eine einfachere, NUnit-ähnliche Syntax hinzufügen kann. Scheint so, als sollte es nicht so schwer sein; obwohl vielleicht lambdas benötigt werden?

+0

Lambda werden wahrscheinlich nicht so oft benötigt wie richtige Generika, aber das ist nur eine Vermutung. Anmerkungen/Attribute hängen überhaupt nicht von anonymen Funktionen ab. – Joey

11

2017 Update: JUnit 5 enthält parametrisierte Tests über die junit-jupiter-params Erweiterung. Einige Beispiele aus der documentation:

Einzel Parameter der primitiven Typen (@ValueSource):

@ParameterizedTest 
@ValueSource(strings = { "Hello", "World" }) 
void testWithStringParameter(String argument) { 
    assertNotNull(argument); 
} 

kommagetrennte Werte (@CsvSource) ermöglicht unter mehreren Parametern ähnlich wie JUnitParams Angabe:

@ParameterizedTest 
@CsvSource({ "foo, 1", "bar, 2", "'baz, qux', 3" }) 
void testWithCsvSource(String first, int second) { 
    assertNotNull(first); 
    assertNotEquals(0, second); 
} 

Andere Quellanmerkungen umfassen @EnumSource, @MethodSource, @ArgumentsSource und @CsvFileSource, siehe documentation für Details.


Ursprüngliche Antwort:

JUnitParams (https://github.com/Pragmatists/JUnitParams) scheint wie eine gute Alternative. Es ermöglicht Ihnen, Prüfparameter als Strings angeben, wie folgt aus:

@RunWith(JUnitParamsRunner.class) 
public class MyTestSuite { 
    @Test 
    @Parameters({"1,2", "3,4"}) 
    public testAdd(int fValue1, int fValue2) { 
     ... 
    } 
} 

Sie auch Parameter durch verschiedene Methoden, Klassen oder Dateien finden Sie in der JUnitParamsRunner api docs Einzelheiten angeben.

5

können Sie haben junit mit Parametern zohhak

Anwendungsbeispiel mit:

@RunWith(ZohhakRunner.class) 
public class HelloWorldTest { 

    @TestWith({ 
     "2, 1, 3", 
     "3, 5, 8" 
    }) 
    public void should_add_numbers(int addend1, int addend2, int result) { 

     assertThat(addend1 + addend2).isEqualTo(result); 
    } 
} 
+0

Das ist noch schöner als die neue '@ ValueSource'-Funktion von JUnit 5. – urig

Verwandte Themen