2008-11-14 10 views
234

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

Занятия, которые я имею в виду: junit.framework.Assert и org.junit.Assert.

+7

В Intellij IDEA вы можете исключить `junit.framework. *` Из раскрывающегося списка статического импорта в `Editor-> General-> Auto Import-> Exclude from Import and Completion`. – jordanpg 2015-08-14 14:03:28

ответ

221

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

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

import static org.junit.Assert.*; 

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

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

+5

Этот ответ не совсем корректен, вы можете сделать статический импорт методов в классе junit.framework.Assert и org.junit.Assert. Однако, вероятно, неплохо придерживаться класса org.junit.Assert, поскольку он новее, слегка переписан и, вероятно, означает замену. – 2015-11-30 09:51:44

5

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

68

JUnit 3.x: junit.framework.Assert

JUnit 4.X: org.junit.Assert

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

3

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

+1

Я считаю, что @David Moles верен, и это было бы функциональным изменением. – orbfish 2013-09-18 16:54:57

17

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