2008-11-14 3 views
234

JUnit 프레임 워크는 2 개의 Assert 클래스 (분명히 다른 패키지에 있음)를 포함하며 각 메소드는 매우 유사하게 보입니다. 아무도 왜 이것을 설명 할 수 있습니까?2 JUnit Assert 클래스 간의 차이점

내가 언급 한 클래스는 junit.framework.Assertorg.junit.Assert입니다.

+7

Intellij IDEA에서는 '편집기 -> 일반 -> 자동 가져 오기 -> 가져 오기 및 완료에서 제외'의 정적 가져 오기 드롭 다운에서'junit.framework. *'를 제외 할 수 있습니다. – jordanpg

답변

221

(JUnit 3의) 이전 방법은 junit.framework.TestCase을 확장하여 테스트 클래스를 표시하는 것이 었습니다. junit.framework.Assert 자체를 상속하고 테스트 클래스는 assert 메서드를 이런 식으로 호출하는 기능을 얻게됩니다.

JUnit의 버전 4부터 프레임 워크는 마킹 테스트에 Annotations을 사용합니다. 따라서 더 이상 TestCase을 확장 할 필요가 없습니다. 그러나 이것은 assert 메서드를 사용할 수 없다는 것을 의미합니다. 그러나 새로운 Assert 클래스를 정적으로 가져올 수 있습니다. 그래서 새로운 클래스의 모든 assert 메서드가 정적 메서드입니다. 따라서 다음과 같이 가져올 수 있습니다.

import static org.junit.Assert.*; 

이 정적 가져 오기 후에는 접두사없이이 메서드를 사용할 수 있습니다.

재 설계시 패키지 이름 지정의 일반적인 규칙을 따르는 새 패키지 org.junit으로 이동했습니다.

+5

이 답변은 완전히 정확하지 않습니다. 클래스 junit.framework.Assert 및 org.junit.Assert에서 정적 가져 오기를 만들 수 있습니다. 그러나 org.junit.Assert 클래스를 사용하는 것이 더 새롭고, 약간 재 작성되었으며, 아마 대체 클래스로 사용되기 때문에 아마 좋은 생각입니다. –

5

저는 리팩토링이 junit.framework에서 org.junitjunit.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

17

기능 변경 사실이있다 : 당신이 float 또는 double와 2 개의 인수를 assertEquals()를 사용하는 경우 junit.framework.Assert이 자동으로 오토 박싱 반면 org.junit.Assert는 불평 할 것이다.

관련 문제