JUnit Assert kullanmaktan daha büyük bir iddia nasıl yapılır?


118

Bu değerler bir testten geliyor

previousTokenValues[1] = "1378994409108"
currentTokenValues[1] = "1378994416509"

ve denerim

    // current timestamp is greater
    assertTrue(Long.parseLong(previousTokenValues[1]) > Long.parseLong(currentTokenValues[1]));

Ben olsun java.lang.AssertionErrorve detailMessagehata ayıklama olduğu üzerine null.

Kullanımda koşullardan daha fazlasını nasıl iddia edebilirim JUnit


Kodun tamamını hata mesajıyla birlikte gönderin. Belki de iddia ifadesi dizi başlatmadan öncedir.
Josh M

Yanıtlar:


153

Nasıl yaptığını. assertTrue(boolean)ayrıca, hata durumunda mesajın assertTrue(String, boolean)olduğu bir aşırı yüke sahiptir String; şunun gibi şeylerden daha büyük olmadığını yazdırmak istiyorsanız bunu kullanabilirsiniz.

hamcrest-allEşleştiricileri kullanmak için bağımlılık olarak da ekleyebilirsiniz . Https://code.google.com/p/hamcrest/wiki/Tutorial adresine bakın :

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;

assertThat("timestamp",
           Long.parseLong(previousTokenValues[1]),
           greaterThan(Long.parseLong(currentTokenValues[1])));

Bu aşağıdaki gibi bir hata verir:

java.lang.AssertionError: timestamp
Expected: a value greater than <456L>
     but: <123L> was less than <456L>

3
Bilginize, şunlarıOrderingComparison içeren bağlantı greaterThan: hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/number/…
John B

7
<groupId>org.hamcrest</groupId>,<artifactId>hamcrest-all</artifactId>
gavenkoa

2
JUnit 4.11'i kullandığınızda Hamcrest'in varsayılan olarak dahil edildiğini ve bu nedenle bağımlılığı aramanıza gerek olmadığını unutmayın.
Chanoch


9
@Chanoch Hamcrest-core 1.3'e geçişli olarak bağlı olan junit 4.12 var. Org.hamcrest.CoreMatchers sınıfında daha büyük bir yöntem yoktur. Hamcrest-all 1.3'ü ek bir bağımlılık olarak eklersem, org.hamcrest.Matchers.greaterThan yöntemini sağlar.
Anthony Hayward

18

JUnit iddialarını kullanırken, mesajı her zaman güzel ve açık hale getiririm. Hata ayıklamada büyük miktarda zaman kazandırır. Bu şekilde yapmak, hamcrest Matchers'a ek bir bağımlılık eklemek zorunda kalmaz.

previousTokenValues[1] = "1378994409108";
currentTokenValues[1] = "1378994416509";

Long prev = Long.parseLong(previousTokenValues[1]);
Long curr = Long.parseLong(currentTokenValues[1]);
assertTrue("Previous (" + prev + ") should be greater than current (" + curr + ")", prev > curr);

Güzel çözüm, gerçekten temiz.
Óscar Andreu

13

aşağıdaki basit çözümü de deneyebilirsiniz:

previousTokenValues[1] = "1378994409108";
currentTokenValues[1] = "1378994416509";

Long prev = Long.parseLong(previousTokenValues[1]);
Long curr = Long.parseLong(currentTokenValues[1]);

Assert.assertTrue(prev  > curr );   

9

Derleme Yolunuza Hamcrest-library eklemelisiniz. LessThan () yöntemine sahip gerekli Matchers.class'ı içerir.

Bağımlılık aşağıdaki gibidir.

<dependency>
  <groupId>org.hamcrest</groupId>
  <artifactId>hamcrest-library</artifactId>
  <version>1.3</version>
  <scope>test</scope>
</dependency>

2
assertTrue("your message", previousTokenValues[1].compareTo(currentTokenValues[1]) > 0)

bu önceki> mevcut değerler için geçer


1

Alternatif olarak hamcrest, gibi ekstra kitaplık eklemek istenmiyorsa, mantık junityalnızca bağımlılık kullanılarak yardımcı yöntem olarak uygulanabilir :

public static void assertGreaterThan(int greater, int lesser) {
    assertGreaterThan(greater, lesser, null);
}

public static void assertGreaterThan(int greater, int lesser, String message) {
    if (greater <= lesser) {
        fail((StringUtils.isNotBlank(message) ? message + " ==> " : "") +
                "Expected: a value greater than <" + lesser + ">\n" +
                "But <" + greater + "> was " + (greater == lesser ? "equal to" : "less than") + " <" + lesser + ">");
    }
}

1

Şu anda JUnit'te sözdizimi şu şekildedir:

AssertTrue(Long.parseLong(previousTokenValues[1]) > Long.parseLong(currentTokenValues[1]), "your fail message ");

Bu, koşulun mesajın önünde olduğu anlamına gelir.


0

Bunu böyle koyabilirsin

  assertTrue("your fail message ",Long.parseLong(previousTokenValues[1]) > Long.parseLong(currentTokenValues[1]));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.