سؤال

هل هناك جونيت متوازي مع nunit CollectionAssert?

هل كانت مفيدة؟

المحلول

باستخدام Junit 4.4 يمكنك استخدام assertThat() جنبا إلى جنب مع هامكريست الكود (لا تقلق، يتم شحنها مع Junit، لا حاجة للحصول على إضافي .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"))));

باستخدام هذا النهج سوف تحصل على وصف جيد للتأكيد عند فشله.

نصائح أخرى

ليس مباشرة، لا. أقترح استخدام هامكريست, ، والتي توفر مجموعة غنية من القواعد المطابقة التي تدمج بشكل جيد مع Junit (وأطر اختبار أخرى)

نلقي نظرة في مهرجان تأكيدات بطلاقة. IMHO أنها أكثر ملاءمة للاستخدام من Hamcrest (وعلى قدم المساواة قوية، مقالة، إلخ) ولها دعم IDE أفضل بفضل واجهة بطلاقة. يرى https://github.com/alexruiz/fest-assert-2.x/wiki/using-fest-assertions.

حل JOACHIM SAUER هو جميل ولكن لا يعمل إذا كان لديك بالفعل مجموعة من التوقعات التي تريد التحقق منها هي في ناتك. قد يأتي هذا عندما يكون لديك بالفعل توقعات نوهة أو ثابتة في اختباراتك التي تريد مقارنة النتيجة، أو ربما لديك توقعات متعددة تتوقع أن يتم دمجها في النتيجة. لذلك بدلا من استخدام المتراءات، يمكنك فقط استخدام 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
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top