একটি তালিকা হ্যামক্রস্টে খালি নয় তা পরীক্ষা করা হচ্ছে


147

কেউ যদি একটি তালিকা ব্যবহার করে খালি পরীক্ষা করার উপায় জানতেন আমি ভাবছিলাম assertThat()এবং Matchers?

স্রেফ JUnit ব্যবহারের সর্বোত্তম উপায়

assertFalse(list.isEmpty());

তবে আমি আশা করছিলাম যে হ্যামক্রেষ্টে এটি করার কোনও উপায় আছে।


2
আরও ভাল সমাধানের জন্য, ভোট দিন: Code.google.com/p/hamcrest/issues/detail?id=97
Fabricio লেমোস

2
@ ফ্যাব্রিকিওলোমোস ইস্যু # 97 টি সমাধান হয়েছে বলে মনে হচ্ছে এবং গিট শাখায় দক্ষ হয়ে উঠবে। আশা করি এটি পরবর্তী হ্যামস্ট্রেস্ট মুক্তির খুব শীঘ্রই হবে।
রাফালম্যাগ

@ ইরালম্যাগ ভাল জায়গা
V1.3

উত্তর:


165

ঠিক আছে সবসময়

assertThat(list.isEmpty(), is(false));

... তবে আমি অনুমান করছি যে আপনি যা বোঝাতে চেয়েছিলেন এটি ঠিক তা নয় :)

বিকল্পভাবে:

assertThat((Collection)list, is(not(empty())));

empty()Matchersক্লাসে একটি স্ট্যাটিক । উল্লেখ্য নিক্ষেপ করার প্রয়োজন listথেকে Collection, Hamcrest 1.2 এর নড়বড়ে জেনেরিক্স ধন্যবাদ।

নিম্নলিখিত আমদানি হ্যামক্রেষ্ট 1.3 ব্যবহার করা যেতে পারে

import static org.hamcrest.Matchers.empty;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNot.*;

6
আমি দেখতে পেয়েছি যে আপনি প্রথম বন্ধনী অদৃশ্য করতে আপনার সিনট্যাক্স হাইলাইট পরিবর্তন করলে হ্যামক্রস্ট কোডটি আরও সুন্দর দেখাচ্ছে ...
স্কাফম্যান

2
@ tkeE2036: এটি হ্যামক্রাস্টের ভাঙ্গা জেনেরিকের কাজ। কখনও কখনও এটি সঙ্কলন করতে আপনাকে কাস্ট করতে হবে, যেমনassertThat((Collection)list, is(not(empty())));
স্কেফম্যান 21


14
@ ডিজিইসিউ পরীক্ষাটি ব্যর্থ হলে এটি আপনাকে আরও ভাল ত্রুটির বার্তা দেয়। সুতরাং পরিবর্তে expected true but got falseআপনার মতো কিছু পানexpected empty but got [1, 2, 3]
ব্র্যাড কাপিট

3
যদি আপনি কোনও চেক না করা রূপান্তরকে পছন্দ করেন এবং স্থিতিশীল আমদানি ত্যাগ করতে ইচ্ছুক হন, তবে আপনি পদ্ধতিটিতে assertThat(list, Matchers.<String>empty())String
জেনেরিকগুলি

77

এটি হ্যামক্রাস্ট ১.৩ এ স্থির করা হয়েছে। নীচের কোডগুলি সংকলন করে এবং কোনও সতর্কতা উত্পন্ন করে না:

// given
List<String> list = new ArrayList<String>();
// then
assertThat(list, is(not(empty())));

তবে আপনার যদি পুরানো সংস্করণ ব্যবহার করতে হয় - বগডের পরিবর্তে empty()আপনি ব্যবহার করতে পারেন:

hasSize(greaterThan(0))
( import static org.hamcrest.number.OrderingComparison.greaterThan;বা
import static org.hamcrest.Matchers.greaterThan;)

উদাহরণ:

// given
List<String> list = new ArrayList<String>();
// then
assertThat(list, hasSize(greaterThan(0)));

উপরের সমাধানগুলি সম্পর্কে সবচেয়ে গুরুত্বপূর্ণ বিষয়টি হ'ল এটি কোনও সতর্কতা উত্পন্ন করে না। দ্বিতীয় সমাধানটি আরও কার্যকর যদি আপনি সর্বনিম্ন ফলাফলের আকারটি অনুমান করতে চান।


1
@ আরগারডপ্যাক আপনি এখানে যান আমি 1.3 শৈলীর উদাহরণ যুক্ত করেছি। :)
রাফালমাগ

1
সতর্ক থাকুন যে assertThat(list, not(hasSize(0)))হতে হবে সফল যদি listহয় nullযেমন বিরোধিতাassertThat(list, hasSize(greaterThan(0)))
হোসে Andias

5

আপনি যদি পঠনযোগ্য ব্যর্থ বার্তাগুলির পরে থাকেন তবে খালি তালিকা সহ সাধারণ assertEquals ব্যবহার করে আপনি হ্যামক্রাস্ট ছাড়াই করতে পারেন:

assertEquals(new ArrayList<>(0), yourList);

যেমন আপনি যদি চালান

assertEquals(new ArrayList<>(0), Arrays.asList("foo", "bar");

তুমি পাও

java.lang.AssertionError
Expected :[]
Actual   :[foo, bar]

2
অনুমান করা খালি তালিকায় কী ছিল তা দেখে সত্যিই খুব ভাল লাগল!
এইচডিউভ

0

আপনার নিজস্ব পছন্দসই ইস্পেটি টাইপসেফম্যাচার তৈরি করুন:

জেনেরিক সমস্যাগুলি যদি 1.3এই পদ্ধতি সম্পর্কে দুর্দান্ত জিনিসটিতে স্থির করা হয় তবে এটি কোনও isEmpty()পদ্ধতিতে যে কোনও ক্লাসে কাজ করে ! শুধু না Collections!

উদাহরণস্বরূপ এটি Stringপাশাপাশি কাজ করবে !

/* Matches any class that has an <code>isEmpty()</code> method
 * that returns a <code>boolean</code> */ 
public class IsEmpty<T> extends TypeSafeMatcher<T>
{
    @Factory
    public static <T> Matcher<T> empty()
    {
        return new IsEmpty<T>();
    }

    @Override
    protected boolean matchesSafely(@Nonnull final T item)
    {
        try { return (boolean) item.getClass().getMethod("isEmpty", (Class<?>[]) null).invoke(item); }
        catch (final NoSuchMethodException e) { return false; }
        catch (final InvocationTargetException | IllegalAccessException e) { throw new RuntimeException(e); }
    }

    @Override
    public void describeTo(@Nonnull final Description description) { description.appendText("is empty"); }
}

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