JUnit Assert का उपयोग करने की तुलना में अधिक मुखर कैसे करें?


118

मेरे पास ये मूल्य एक परीक्षण से आ रहे हैं

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

और मैं कोशिश करता हूं

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

मुझे मिलता है java.lang.AssertionErrorऔर detailMessageडिबगिंग पर है null

मैं उपयोग करने की शर्तों से अधिक जोर कैसे दे सकता हूं JUnit


संपूर्ण त्रुटि संदेश के साथ संपूर्ण कोड भी पोस्ट करें। शायद आप आरंभीकरण कथन सरणी आरंभीकरण से पहले हैं।
जोश एम।

जवाबों:


153

बस आपने इसे कैसे किया है। assertTrue(boolean)भी एक अधिभार है, assertTrue(String, boolean)जहांString विफलता के मामले में संदेश है; आप इसका उपयोग कर सकते हैं यदि आप प्रिंट करना चाहते हैं कि इस तरह का और-तो-और-तो-और से अधिक नहीं था।

आप hamcrest-allमैचर्स का उपयोग करने के लिए एक निर्भरता के रूप में भी जोड़ सकते हैं । Https://code.google.com/p/hamcrest/wiki/Tutorial देखें :

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

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

यह एक त्रुटि देता है जैसे:

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

3
FYI करें, यहां वह लिंक है OrderingComparisonजिसमें शामिल है greaterThan: hamcrest.org/Java Hamcrest
John B

7
<groupId>org.hamcrest</groupId>,<artifactId>hamcrest-all</artifactId>
गावेंको

2
ध्यान दें कि Hamcrest डिफ़ॉल्ट रूप से शामिल है जब आप JUnit 4.11 का उपयोग करते हैं तो निर्भरता की खोज करने की कोई आवश्यकता नहीं है।
१४:४४ से


9
@ चॉँच मेरे पास ४.१२ है जो संक्रामक रूप से हैमरेस्ट-कोर १.३ पर निर्भर करता है। Org.hamcrest.CoreMatchers वर्ग पर कोई अधिक थान विधि नहीं है। अगर मैं एक अतिरिक्त निर्भरता के रूप में हैमरेस्ट-सभी 1.3 जोड़ता हूं, तो यह org.hamcrest.Matchers.gitoryThan विधि प्रदान करता है।
एंथनी हेवर्ड

18

JUnit का उपयोग करते समय, मैं हमेशा संदेश को अच्छा और स्पष्ट बनाता हूं। यह डिबगिंग के समय की बड़ी मात्रा बचाता है। इस तरह से करने से हैमरेस्ट मैचर्स पर एक अतिरिक्त निर्भरता जोड़ने से बचा जाता है।

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);

अच्छा समाधान, वास्तव में साफ।
ऑस्कर Andreu

13

आप नीचे दिए गए सरल सोलन को भी आज़मा सकते हैं:

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

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

Assert.assertTrue(prev  > curr );   

9

आपको अपने बिल्ड पथ में हैमरेस्ट-लाइब्रेरी को जोड़ना चाहिए। इसमें आवश्यक Matchers.class होता है जिसमें कम () विधि होती है।

नीचे के रूप में निर्भरता

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


1

वैकल्पिक रूप से अगर अतिरिक्त पुस्तकालय जोड़ना जैसे कि hamcrestवांछनीय नहीं है, तो तर्क को junitकेवल निर्भरता का उपयोग करके उपयोगिता पद्धति के रूप में लागू किया जा सकता है :

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

जैसा कि मैं जानता हूं, फिलहाल, JUnit में, वाक्य रचना इस तरह है:

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

इसका मतलब है कि, संदेश के सामने शर्त है।


0

आप इसे इस तरह लगा सकते हैं

  assertTrue("your fail message ",Long.parseLong(previousTokenValues[1]) > Long.parseLong(currentTokenValues[1]));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.