Чи існує jUnit паралельний NUnit CollectionAssert
?
Чи існує jUnit паралельний NUnit CollectionAssert
?
Відповіді:
Використовуючи JUnit 4.4, ви можете використовувати assertThat()
разом із кодом Hamcrest (не хвилюйтеся, він постачається з 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"))));
Використовуючи цей підхід, ви автоматично отримаєте хороший опис твердження, коли воно не вдається.
Не безпосередньо, ні. Я пропоную використовувати Hamcrest , який забезпечує багатий набір правил відповідності, який чудово інтегрується з jUnit (та іншими тестовими рамками)
Погляньте на FEST Fluent Assertions. IMHO вони зручніші у використанні, ніж Hamcrest (і однаково потужні, розширювані тощо) і мають кращу підтримку IDE завдяки вільному інтерфейсу. Див. Https://github.com/alexruiz/fest-assert-2.x/wiki/Using-fest-assertions
Рішення Йоахіма Зауера приємне, але не працює, якщо у вас вже є цілий ряд очікувань, які ви хочете перевірити, чи є результати у вашому результаті. Це може виникнути, коли у вас вже є сформоване або постійне сподівання у тестах, з яким ви хочете порівняти результат, або, можливо, у вас є кілька очікувань, які, як ви очікуєте, будуть об’єднані в результаті. Отже, замість використання збігів ви можете просто використати 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()]))
. Це дасть вам кращі повідомлення про помилки.