2つのJUnitアサートクラスの違い


257

JUnitフレームワークには2つのAssertクラス(明らかに異なるパッケージ内)が含まれており、それぞれのメソッドは非常に似ているように見えます。これがなぜなのか誰かが説明できますか?

私が言及してるクラスは次のとおりjunit.framework.Assertorg.junit.Assert


8
Intellij IDEAではjunit.framework.*、の静的インポートドロップダウンから除外できますEditor->General->Auto Import->Exclude from Import and Completion
jordanpg 2015

回答:


239

(JUnit 3の)古い方法は、を拡張してテストクラスをマークすることでしたjunit.framework.TestCase。それはjunit.framework.Assertそれ自体を継承し、テストクラスはこの方法でassertメソッドを呼び出す機能を獲得しました。

JUnitのバージョン4以降、フレームワークはAnnotationsテストのマーキングに使用します。したがって、拡張する必要はありませんTestCase。しかし、これは、assertメソッドが利用できないことを意味します。ただし、新しいAssertクラスの静的インポートを作成できます。これが、新しいクラスのすべてのassertメソッドが静的メソッドである理由です。したがって、次のようにインポートできます。

import static org.junit.Assert.*;

この静的インポートの後、プレフィックスなしでこのメソッドを使用できます。

再設計時に、彼らはまたorg.junit、パッケージの命名に関する通常の慣例に従っている新しいパッケージに移動しました。


6
この答えは完全に正しいわけではありません。junit.framework.Assertおよびorg.junit.Assertクラスのメソッドを静的にインポートできます。ただし、org.junit.Assertクラスを使用することをお勧めします。これは、org.junit.Assertクラスがより新しく、わずかに書き直され、おそらく代替として意図されているためです。
Glenn Bech

75

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

特に注釈サポート付きのJDK5以降を実行している場合は、最新のものを優先してください。


19

実際に機能的な変更がありorg.junit.Assertます。またはで2つの引数assertEquals()を使用すると文句を言われ、サイレントにオートボックス化されます。floatdoublejunit.framework.Assert


5

私はそれらをjunit.frameworktoにリファクタリングし、後方互換性のために維持されているorg.junitと思いますjunit.framework.Assert


3

大まかなソースコードの比較を行いましたが、重大な変更はありません。多くのコメントが追加されorg.junit.Assert、いくつかのリファクタリングが行われています。唯一の変更点は、との比較Arraysです。いくつかのコードのクリーンアップがありますが、(私見)機能的な変更はありません


1
@David Molesは正しいと思います。これは機能的な変更になるでしょう。
orbfish 2013

1

Android Studio(およびIntelliJでも)では、junit.framework自動インポートの提案からグローバルに除外できます。

IDEまたはの間でスコープを設定できProjectます。JUnit 3を使用するプロジェクトがない場合は、IDEスコープをそのまま使用できます。

設置位置:

設定->エディター->一般->自動インポート

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.