2012-03-15 12 views
9

Przybycie do Java z Pythona. Rozumiem, że to dość proste, ale wygląda na to, że nie zostało to jeszcze zadane, a Google jest ze mną skromny.W teście jednostki Java, w jaki sposób mogę potwierdzić liczbę, która mieści się w podanym zakresie?

W Pythonie, ja po prostu zrobić coś takiego, ale obiekty Java:

assertTrue(min <= mynum and mynum <= max); 
+0

Ponieważ 'and' nie jest słowem kluczowym Java. Chcesz '&&'. –

+1

Ah, tak. "import stat static org.junit.Assert.assertTrue" również pomogło. Dziękuje wszystkim! – klenwell

Odpowiedz

13

bym napisać:

assertTrue("mynum is out of range: " + mynum, min <= mynum && mynum <= max); 

ale technicznie wystarczy:

assertTrue(min <= mynum && mynum <= max); 

Tak czy inaczej, należy napisać && i nie and.

1

assertTrue(min <= mynum && mynum <= max, "not in range");

komentarz na końcu jest opcjonalne. Zasadniczo taki sam jak wersja python, z wyjątkiem &&.

1

Użyj && zamiast and; poza tym, to, co napisałeś, powinno zadziałać.

3

można również użyć biblioteki Hamcrest, jest to bardziej czytelne.

assertThat(mynum,greaterThanOrEqualTo(min)); 

assertThat(mynum,lessThanOrEqualTo(max)); 

Nie wiem, czy można połączyć te dwie linie.

2

Rozszerzenie na this odpowiedź: można połączyć dwa z allOf.

assertThat(mynum, allOf(greaterThanOrEqualTo(min),lessThanOrEqualTo(max))); 

OR równoważne Hamcrest jest anyOf.

1

Jeśli używasz AssertJ staje nawet bardziej czytelny:

assertThat(mynum).isGreaterThanOrEqualTo(min).isLessThanOrEqualTo(max); 

Plus AssertionError bije wersję assertTrue jak nie trzeba dostarczyć opis, np:

java.lang.AssertionError: 
Expecting: 
<10> 
to be less than or equal to: 
<42> 

Jeśli używasz Java 8 i AssertJ 3.0.0, możesz użyć lambda, aby go określić:

assertThat(mynum).matches(actual -> actual >= min && actual <= max); 
+0

Jak ten błąd jest bardziej czytelny? 10 jest mniejsze lub równe 42, co jest po prostu mylące. – clcto

+2

I stwierdzenie to brzmi bardziej naturalnie w porównaniu z wersjami "assertTrue" i Hamcrest. – Jonathan

7

użyję AssertJ jak Jonathan powiedział, ale z prostych twierdzeń :)

assertThat(mynum).isBetween(min, max); 

Myślę, że to najfajniejsze rozwiązanie :)

Powiązane problemy