কেউ যদি একটি তালিকা ব্যবহার করে খালি পরীক্ষা করার উপায় জানতেন আমি ভাবছিলাম assertThat()
এবং Matchers
?
স্রেফ JUnit ব্যবহারের সর্বোত্তম উপায়
assertFalse(list.isEmpty());
তবে আমি আশা করছিলাম যে হ্যামক্রেষ্টে এটি করার কোনও উপায় আছে।
কেউ যদি একটি তালিকা ব্যবহার করে খালি পরীক্ষা করার উপায় জানতেন আমি ভাবছিলাম assertThat()
এবং Matchers
?
স্রেফ JUnit ব্যবহারের সর্বোত্তম উপায়
assertFalse(list.isEmpty());
তবে আমি আশা করছিলাম যে হ্যামক্রেষ্টে এটি করার কোনও উপায় আছে।
উত্তর:
ঠিক আছে সবসময়
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.*;
assertThat((Collection)list, is(not(empty())));
expected true but got false
আপনার মতো কিছু পানexpected empty but got [1, 2, 3]
assertThat(list, Matchers.<String>empty())
String
এটি হ্যামক্রাস্ট ১.৩ এ স্থির করা হয়েছে। নীচের কোডগুলি সংকলন করে এবং কোনও সতর্কতা উত্পন্ন করে না:
// 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)));
উপরের সমাধানগুলি সম্পর্কে সবচেয়ে গুরুত্বপূর্ণ বিষয়টি হ'ল এটি কোনও সতর্কতা উত্পন্ন করে না। দ্বিতীয় সমাধানটি আরও কার্যকর যদি আপনি সর্বনিম্ন ফলাফলের আকারটি অনুমান করতে চান।
assertThat(list, not(hasSize(0)))
হতে হবে সফল যদি list
হয় null
যেমন বিরোধিতাassertThat(list, hasSize(greaterThan(0)))
আপনি যদি পঠনযোগ্য ব্যর্থ বার্তাগুলির পরে থাকেন তবে খালি তালিকা সহ সাধারণ assertEquals ব্যবহার করে আপনি হ্যামক্রাস্ট ছাড়াই করতে পারেন:
assertEquals(new ArrayList<>(0), yourList);
যেমন আপনি যদি চালান
assertEquals(new ArrayList<>(0), Arrays.asList("foo", "bar");
তুমি পাও
java.lang.AssertionError
Expected :[]
Actual :[foo, bar]
জেনেরিক সমস্যাগুলি যদি 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"); }
}