Различия между 2 классами JUnit Assert

Структура JUnit содержит 2 Assert класса (в разных пакетах, очевидно), и методы на каждом из них кажутся очень похожими. Может ли кто-нибудь объяснить, почему это?

Я имею в виду следующие классы: junit.framework.Assert и org.junit.Assert.

Ответ 1

Старый метод (JUnit 3) должен был пометить тестовые классы, расширив junit.framework.TestCase. Это унаследовало junit.framework.Assert и ваш тестовый класс получил возможность вызвать методы assert таким образом.

Начиная с версии 4 JUnit, среда использует Annotations для маркировки тестов. Поэтому вам больше не нужно расширять TestCase. Но это означает, что методы assert недоступны. Но вы можете сделать статический импорт нового класса Assert. Вот почему все методы assert в новом классе являются статическими методами. Таким образом, вы можете импортировать его следующим образом:

import static org.junit.Assert.*;

После этого статического импорта вы можете использовать эти методы без префикса.

При редизайне они также переместились в новый пакет org.junit, который лучше соответствует нормальным соглашениям об именах пакетов.

Ответ 2

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

Предпочитайте новый, особенно при запуске JDK5 и выше с поддержкой аннотаций.

Ответ 3

На самом деле существует функциональное изменение: org.junit.Assert будет жаловаться, если вы используете два аргумента assertEquals() с float или double, а junit.framework.Assert будет автоматически отключать его.

Ответ 4

Я считаю, что они рефакторинг от junit.framework до org.junit и junit.framework.Assert поддерживается для обратной совместимости.

Ответ 5

Я сравнил исходный код с исходным кодом и серьезных изменений не произошло. В org.junit.Assert было добавлено много комментариев, и некоторые рефакторинги были выполнены. Единственное изменение - сравнение с Arrays. Есть некоторые очистки кода, но там (imho) нет функциональных изменений.