NUnit'e paralel bir jUnit var CollectionAssert
mı?
NUnit'e paralel bir jUnit var CollectionAssert
mı?
Yanıtlar:
JUnit 4.4'ü kullanarak assertThat()
, koleksiyonlar üzerinde işleyenler.jar
de dahil olmak üzere karmaşık kendini tanımlayan iddialar üretmek için Hamcrest koduyla birlikte kullanabilirsiniz (endişelenmeyin, JUnit ile birlikte gelir, fazladan gerek yoktur )
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"))));
Bu yaklaşımı kullanarak, başarısız olduğunda otomatik olarak iddianın iyi bir tanımını alacaksınız.
Doğrudan değil, hayır. JUnit (ve diğer test çerçeveleri) ile güzel bir şekilde bütünleşen zengin bir eşleştirme kuralları seti sağlayan Hamcrest'in kullanılmasını öneriyorum.
FEST Fluent Assertions'a bir göz atın. IMHO Hamcrest'ten daha kullanışlıdırlar (ve eşit derecede güçlü, genişletilebilir vb.) Ve akıcı arayüz sayesinde daha iyi IDE desteğine sahiptirler. Bkz. Https://github.com/alexruiz/fest-assert-2.x/wiki/Using-fest-assertions
Joachim Sauer'ın çözümü güzeldir ancak sonucunuzda olduğunu doğrulamak istediğiniz bir dizi beklentiniz varsa işe yaramaz. Bu, testlerinizde bir sonucu karşılaştırmak istediğiniz, zaten oluşturulmuş veya sabit bir beklentiniz olduğunda veya belki de sonuçta birleştirilmesini beklediğiniz birden fazla beklentiniz olduğunda ortaya çıkabilir. Bunun yerine matchers kullanmanın sadece işime yarar List::containsAll
ve assertTrue
Örnek:
@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()]))
. Size daha iyi hata mesajları verecektir.