Структура JUnit содержит 2 Assert класса (в разных пакетах, очевидно), и методы на каждом из них кажутся очень похожими. Может ли кто-нибудь объяснить, почему это?
Я имею в виду следующие классы: junit.framework.Assert и org.junit.Assert.
Структура JUnit содержит 2 Assert класса (в разных пакетах, очевидно), и методы на каждом из них кажутся очень похожими. Может ли кто-нибудь объяснить, почему это?
Я имею в виду следующие классы: junit.framework.Assert и org.junit.Assert.
Старый метод (JUnit 3) должен был пометить тестовые классы, расширив junit.framework.TestCase. Это унаследовало junit.framework.Assert и ваш тестовый класс получил возможность вызвать методы assert таким образом.
Начиная с версии 4 JUnit, среда использует Annotations для маркировки тестов. Поэтому вам больше не нужно расширять TestCase. Но это означает, что методы assert недоступны. Но вы можете сделать статический импорт нового класса Assert. Вот почему все методы assert в новом классе являются статическими методами. Таким образом, вы можете импортировать его следующим образом:
import static org.junit.Assert.*;
После этого статического импорта вы можете использовать эти методы без префикса.
При редизайне они также переместились в новый пакет org.junit, который лучше соответствует нормальным соглашениям об именах пакетов.
JUnit 3.X: junit.framework.Assert
JUnit 4.X: org.junit.Assert
Предпочитайте новый, особенно при запуске JDK5 и выше с поддержкой аннотаций.
На самом деле существует функциональное изменение: org.junit.Assert будет жаловаться, если вы используете два аргумента assertEquals() с float или double, а junit.framework.Assert будет автоматически отключать его.
Я считаю, что они рефакторинг от junit.framework до org.junit и junit.framework.Assert поддерживается для обратной совместимости.
Я сравнил исходный код с исходным кодом и серьезных изменений не произошло. В org.junit.Assert было добавлено много комментариев, и некоторые рефакторинги были выполнены. Единственное изменение - сравнение с Arrays. Есть некоторые очистки кода, но там (imho) нет функциональных изменений.