2016-06-02 16 views
3

Ich möchte einen Test schreiben, mit dem ich überprüfen kann, ob eine Funktion einen von zwei Werten zurückgibt. Zum Beispiel:Mit jUnit 4.12 und Hamcrest 1.3, wie kann ich behaupten, dass eine Funktion eine von zwei Ganzzahlen zurückgibt?

@Test 
    public void testRandomFunction() { 
    assertEquals(
     either(equalTo(2)).or(equalTo(3)), 
     RandomFunction(5) 
    ); 
    return; 
    } 

Online lesen Ich habe über die Matcher in Hamcrest erfahren. Der Code kompiliert, aber wenn ich den Test ausführe, scheint es, dass die Ganzzahl 5 mit einem Matcher-Objekt verglichen wird anstelle von Ganzzahlen 2 und 3.

Ich bin offen für etwas anderes als Matcher, wenn es das einfacher macht. Weiß jemand wie ich das machen kann?

Ich habe versucht, auch die folgenden ohne Erfolg:

@Test 
    public void testRandomFunction() { 
    Set<Integer> acceptedValues = new HashSet<Integer>(); 
    acceptedValues.add(2); 
    acceptedValues.add(3); 

    assertEquals(
     isIn(acceptedValues), 
     RandomFunction(5) 
    ); 
    return; 
    } 

Antwort

3

die Matcher verwenden zu können, müssen Sie assertThat statt assertEquals verwenden.

assertThat(
    "RandomFunction result", 
    RandomFunction(5), 
    either(equalTo(2)).or(equalTo(3)), 
); 
+0

Genau das habe ich gesucht! Vielen Dank !!! – RodCardenas

1
@Test 
public void testRandomFunction() { 
    int result = randomFunction(5); 
    assertTrue(result == 2 || result == 3); 
} 
+0

Das funktioniert auch gut! Vielen Dank! – RodCardenas