различия между 2 классами JUnit Assert - PullRequest
251 голосов
/ 14 ноября 2008

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

Классы, на которые я ссылаюсь: junit.framework.Assert и org.junit.Assert.

Ответы [ 6 ]

234 голосов
/ 14 ноября 2008

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

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

import static org.junit.Assert.*;

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

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

73 голосов
/ 14 ноября 2008

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

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

19 голосов
/ 31 июля 2009

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

5 голосов
/ 14 ноября 2008

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

3 голосов
/ 28 мая 2009

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

0 голосов
/ 21 февраля 2019

В Android Studio (и так же в IntelliJ) вы можете глобально исключить junit.framework из предложения автоматического импорта.

Вы можете установить область действия IDE или Project. Если у вас нет проектов, использующих JUnit 3, вы можете спокойно оставаться в области действия IDE.

Положение установки:

Настройки -> Редактор -> Общие -> Автоматический импорт

enter image description here

...