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

আমি কীভাবে ব্যবহারের অবস্থার চেয়ে বৃহত্তর দৃsert়তা দিতে পারি JUnit


সম্পূর্ণ ত্রুটি বার্তা সহ পুরো কোডটি পোস্ট করুন। সম্ভবত আপনি দৃ statement়তা বিবৃতি অ্যারে আরম্ভের আগে হয়।
জোশ এম

উত্তর:


153

ঠিক কিভাবে আপনি এটি করেছেন। assertTrue(boolean)এছাড়াও একটি ওভারলোড রয়েছে assertTrue(String, boolean)যেখানে Stringব্যর্থতার ক্ষেত্রে বার্তাটি; আপনি এটি ব্যবহার করতে পারেন যদি আপনি মুদ্রণ করতে চান যে এই ধরণের এবং এই জাতীয় তাই-ও-এর চেয়ে বড় ছিল না।

hamcrest-allম্যাথার ব্যবহারের জন্য নির্ভরতা হিসাবে আপনি যুক্ত করতে পারেন। Https://code.google.com/p/hamcrest/wiki/ টিউটোরিয়াল দেখুন :

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
এফওয়াইআই, এখানে লিঙ্কটি OrderingComparisonরয়েছে যার মধ্যে রয়েছে greaterThan: হামক্রস্ট.আর.
জন বি

7
<groupId>org.hamcrest</groupId>,<artifactId>hamcrest-all</artifactId>
গ্যাভেনকোয়া

2
মনে রাখবেন যে আপনি যখন ইউএনএনটি 4.11 ব্যবহার করেন তখন হ্যামক্রেস্ট ডিফল্টরূপে অন্তর্ভুক্ত থাকে সুতরাং নির্ভরতা অনুসন্ধান করার প্রয়োজন নেই।
চনোচ


9
@ চনোকের আমার জুনিট ৪.১২ রয়েছে যা হ্যামক্রাস্ট-কোর ১.৩ এর উপর নির্ভর করে। Org.hamcrest.CoreMatchers শ্রেণিতে এর চেয়ে বৃহত্তর কোনও পদ্ধতি নেই। যদি আমি হ্যাক্রেষ্ট-সমস্ত 1.3 অতিরিক্ত নির্ভরতা হিসাবে যুক্ত করি তবে এটি org.hamcrest.Matchers.greaterThan পদ্ধতি সরবরাহ করে।
অ্যান্টনি হ্যাওয়ার্ড

18

JUnit দৃser়পদগুলি ব্যবহার করার সময়, আমি সর্বদা বার্তাটি সুন্দর এবং স্পষ্ট করি। এটি বিপুল পরিমাণে ডিবাগিং সাশ্রয় করে। এটি এইভাবে করা হ্যামক্রাস্ট ম্যাচার্সের উপর একটি অতিরিক্ত নির্ভরতা যুক্ত করা এড়ানো উচিত।

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

সুন্দর সমাধান, সত্যিই পরিষ্কার।
এসকার আন্দ্রেউ

13

আপনি সাধারণ দ্রাবক নীচে চেষ্টা করতে পারেন:

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

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

Assert.assertTrue(prev  > curr );   

9

আপনার বিল্ড পাথটিতে আপনার হামক্রেস্ট-গ্রন্থাগার যুক্ত করা উচিত। এটিতে প্রয়োজনীয় ম্যাচার্স.ক্লাস রয়েছে যাতে কম (থান) পদ্ধতি রয়েছে।

নীচে নির্ভরশীলতা।

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

এটি পূর্ববর্তী> বর্তমান মানগুলির জন্য পাস করে


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]));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.