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


257

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

Классы я имею в виду , являются: junit.framework.Assertи org.junit.Assert.


8
В Intellij IDEA вы можете исключить junit.framework.*из выпадающего списка статический импорт в Editor->General->Auto Import->Exclude from Import and Completion.
jordanpg

Ответы:


239

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

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

import static org.junit.Assert.*;

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

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


6
Этот ответ не совсем корректен, вы можете выполнить статический импорт методов в классе junit.framework.Assert и org.junit.Assert. Однако, вероятно, хорошей идеей будет придерживаться класса org.junit.Assert, поскольку он более новый, слегка переписан и, вероятно, предназначен для замены.
Гленн Бек

75

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

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


19

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


5

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


3

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


1
Я считаю, что @David Moles - это правильно, и это будет функциональное изменение.
orbfish

1

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

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

Установка положения:

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

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.