JUnit এ সংগ্রহ?


উত্তর:


126

JUnit 4.4 ব্যবহার করে আপনি হ্যাক্রেস্ট কোডের assertThat()সাথে একসাথে ব্যবহার করতে পারেন (উদ্বেগ করবেন না, এটি JUnit এর সাথে প্রেরণ করা হয়েছে, কোনও অতিরিক্তের দরকার নেই ) সংগ্রহগুলিতে পরিচালনা করে এমন জটিল স্ব-বর্ণনামূলক দৃser়তা.jar উত্পন্ন করতে:

import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.*;
import static org.hamcrest.CoreMatchers.*;

List<String> l = Arrays.asList("foo", "bar");
assertThat(l, hasItems("foo", "bar"));
assertThat(l, not(hasItem((String) null)));
assertThat(l, not(hasItems("bar", "quux")));
// check if two objects are equal with assertThat()

// the following three lines of code check the same thing.
// the first one is the "traditional" approach,
// the second one is the succinct version and the third one the verbose one 
assertEquals(l, Arrays.asList("foo", "bar")));
assertThat(l, is(Arrays.asList("foo", "bar")));
assertThat(l, is(equalTo(Arrays.asList("foo", "bar"))));

এই পদ্ধতিটি ব্যবহার করে আপনি স্বয়ংক্রিয়ভাবে দৃsert়রূপে এটির বিশদ বিবরণ পাবেন it


4
ওহ, আমি বুঝতে পারি নি যে হাম্প্রেস্ট এটি জুনিট ডিস্ট্রোতে পরিণত করেছে। গো নাট!
স্কাফম্যান

আমি যদি দাবি করতে চাই যে l আইটেমগুলি ("foo", "বার") দ্বারা গঠিত, তবে অন্য কোনও আইটেম উপস্থিত নেই - এর জন্য কি কিছু সহজ বাক্য গঠন আছে?
রিপার 234

(L.size () == 2) উপরের কোড স্নিপেট ব্যবহার করুন এবং একটি অতিরিক্ত assertTrue মধ্যে নিক্ষেপ
aberrant80

4
মেহ, কুৎসিত। নুনিতে এটি কালেকশনআসর্ট.আরইকুয়াল (সংগ্রহ প্রত্যাশিত, সংগ্রহ প্রকৃত);
রিপার 234

4
গুগল আর একটি স্ট্যাকওভারফ্লো উত্তর খুঁজে পেয়েছিল যা আমি সন্ধান করছিলাম!
মাইকোলা গোলুবিয়েভ

4

সরাসরি না, না। আমি হ্যামক্রেস্টের ব্যবহারের পরামর্শ দিচ্ছি , যা মিলনীয় বিধিগুলির একটি সমৃদ্ধ সেট সরবরাহ করে যা jUnit (এবং অন্যান্য পরীক্ষার ফ্রেমওয়ার্ক) এর সাথে সুন্দরভাবে সংহত করে


এটি কোনও কারণে সংকলন করে না (দেখুন স্ট্যাকওভারফ্লো.com/ সেকশানসাম992981/hamcorses-hasitems ): অ্যারেলিস্ট <Integer> আসল = নতুন অ্যারেলিস্ট <Integer> (); অ্যারেলিস্ট <Integer> প্রত্যাশিত = নতুন অ্যারেলিস্ট <Integer> (); আসল.এডিডি (1); প্রত্যাশিত.এডিডি (2); assertThat (প্রকৃত, hasItems (প্রত্যাশিত));
রিপার 234

2

ফেস্ট ফ্লুয়েন্ট এ্যাসারেন্সগুলি একবার দেখুন। আইএমএইচও তারা হ্যামক্রেস্টের চেয়ে বেশি সুবিধাজনক (এবং সমান শক্তিশালী, এক্সটেনসিবল ইত্যাদি) এবং সাবলীল ইন্টারফেসের জন্য আইডিই সমর্থন করার জন্য আরও ধন্যবাদ thanks Https://github.com/alexruiz/fest-assert-2.x/wiki/Using-fest-assertions দেখুন


2017 এ দেখে মনে হচ্ছে আরও বেশি লোকেরা এসইএসটিজে নামে ফেস্টের একটি শাখা ব্যবহার করছে।
সর্বোচ্চ

2

জোছিম সউরের সমাধানটি দুর্দান্ত তবে আপনি যদি ইতিমধ্যে যাচাই করতে চান এমন প্রত্যাশার একটি অ্যারে থাকে তবে তা কার্যকর হয় না। আপনি যদি ইতিমধ্যে আপনার পরীক্ষাগুলিতে একটি উত্পন্ন বা ধ্রুবক প্রত্যাশা রেখে থাকেন যা আপনি কোনও ফলাফলের সাথে তুলনা করতে চান, বা ফলতে মার্জ হওয়ার আশা করছেন আপনার একাধিক প্রত্যাশা রয়েছে This সুতরাং ম্যাচার ব্যবহার না করে আপনি কেবল List::containsAllএবং assertTrueউদাহরণ হিসাবে ব্যবহার করতে পারেন :

@Test
public void testMerge() {
    final List<String> expected1 = ImmutableList.of("a", "b", "c");
    final List<String> expected2 = ImmutableList.of("x", "y", "z");
    final List<String> result = someMethodToTest(); 

    assertThat(result, hasItems(expected1)); // COMPILE ERROR; DOES NOT WORK
    assertThat(result, hasItems(expected2)); // COMPILE ERROR; DOES NOT WORK

    assertTrue(result.containsAll(expected1));  // works~ but has less fancy
    assertTrue(result.containsAll(expected2));  // works~ but has less fancy
}

আপনি সর্বদা ব্যবহার করতে পারেন hasItems(expected1.toArray(new String[expected1.size()]))। এটি আপনাকে আরও ভাল ব্যর্থতার বার্তা দেবে।
meustrus
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.