2017-04-07 7 views
0

私はJUnitを使用しませんが、異なるライブラリの2つのインポートされたソースコードを持ち、どちらもJUnitを使用しています。しかし、彼らは別のバージョンを使用しているようです。JUnitの異なるバージョンに依存するソースコードを扱う方法

たとえば、junit.runner...のようなものをインポートし、もう1つはorg.junit.runners...をインポートします。

JUnitのマニュアルを少し読んだところ、彼らは厳密な下位互換性の原則に従わず、異なるバージョンのものは明らかに異なる機能を持ち、異なるコードを必要とするため、「アップグレードする"私の図書館の1つは、最新のバージョンです。

どのようにこの非互換性を処理しますか? (ちょうど半分傾いているすべてのテストを投げ捨てる以外に)

+0

私はJUnitが下位互換性についてかなり良いと感じていました。実際にクラスパスに最新のバージョンのみを置き、問題が発生しているかどうかを確認しましたか? – VGR

+0

@NathanHughes私はバンドルされたjarではなく、ソースコードを使用しています。私は同じ名前の "junit.jar"という2つの異なるファイルを同じフォルダ(私のlibフォルダ)に入れることはできません。今、私はjunit.jar libをソースコードの1つのセットだけで動作させますが、他のセットはコンパイルに失敗しています。 jarit3.jarとjunit4.jarと言うと、2つの異なるjarが同じパッケージ構造を公開していると、名前の競合に問題が生じる可能性があります。 –

答えて

1

Junit 3とjunit 4では、3つのjunit.frameworkと4のorg.junitが別々のパッケージ階層を使用します。これらの異なるバージョンを利用するテストは、共存することができる。コードベースで同じモックライブラリやHamcrestのようなヘルパーの異なるバージョンを使用している場合は、他のライブラリで問題が発生する可能性があります。私はこれらを組み合わせることを非常に躊躇します。

これら2つのコードを別々のプロジェクトに分け、それぞれ独自のバージョンのjunitで独自のテストを実行させます。次に、2つのクラスのセットを1つのjarファイルにまとめたり、uberjarなどを使ったりするスクリプトを書くことができます。使用しているビルドツールのプラグインを確認してください。

特に、他人のコードを変更している場合は、テストを破棄するのは無謀なようです。たとえ彼らが価値を提供していないように見えるとしても、何よりも優れており、徐々に改善することができます。

+0

私はこれを考えましたが、私は別々のプロジェクトの複雑さを避けることを望んでいました。私はすべてのプロジェクトを一つのプロジェクトにまとめたいと思っています。私はIntelliJ BTWを使用します。 –

1

ユニットテストのポイントは、の不具合を見つけて解決するのに役立ちます。

自分自身に質問してください: "あなたはそれらのテストを実行するつもりですか?そのサードパーティのコードを修正するには?"

おそらく答えは「いいえ」です。 (そしてそれは私の目の中で "いいえ"でなければならない)。

したがって、あなたの直感に従ってに行き、すべてのテストをただ破棄してください

それ以外はユニットテストです。そのサードパーティのコードを提供する人々によって運営されることになっています。テストをソースコード上で実行するときには、どのようなことが予想されますか?意味:ユニットテストが壊れている配送を出荷している場合。最初にその製品を使用しないことを検討する必要があります。

そして、この考えを続ける:JUnit4は何年も外れています。これは、おそらく何年も前に単体テストの設定を更新しなくなった製品を使用していることを意味しています。

0

クラスパスにJUnit 3(junit.runner)とJUnit 4(org.junit.runners)の異なるJARを配置する必要はありません。 JUnit4 jarにはJUnit 3クラスも含まれています。これを使用して、JUnit 3 および JUnit 4テストを実行できます。