Структура 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) нет функциональных изменений.