различия между 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который лучше следует обычным правилам именования пакетов.

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

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

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

RENES
источник
19

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

Дэвид Моулз
источник
5

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

sblundy
источник
3

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

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

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

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

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

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

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

MatPag
источник