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

Починаючи з версії 4 JUnit, фреймворк використовує Annotationsдля тестів на маркування. Тож вам більше не потрібно продовжувати TestCase. Але це означає, що методи затвердження недоступні. Але ви можете зробити статичний імпорт нового Assertкласу. Тому всі методи затвердження в новому класі - це статичні методи. Отже, ви можете імпортувати його таким чином:

import static org.junit.Assert.*;

Після цього статичного імпорту ви можете використовувати ці методи без префікса.

Після оновлення вони також перейшли до нового пакету, org.junitякий краще відповідає нормальним умовам для іменування пакунків.


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

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.