AntをMaven(3.3.3、重要な場合)から使用することから私たちのレガシービルドを変換しています。私たちのコードベースには、システムプロパティからプライベート静的フィールドを初期化するクラスがあります。これは通常、アプリケーション呼び出し時の起動スクリプトによって生成されます。このコードを実行する単体テストは、テストを実行する前にシステムのプロパティを設定しています。 AntまたはEclipse JUnitランナーを使用して単体テストを実行すると、すべて正常に動作します。 Mavenを実行すると、ユニットテストが実行される前に静的フィールドが初期化され、プロパティが存在しなくなり、テストが失敗するように見えます。JUnitクラスローダーは、システムプロパティと静的フィールドでMavenに移動するときに問題が発生します。
実際のコードをここに掲載することは許可されていないため、サンプルクラスと単体テストを組み合わせてデモンストレーションしました。
package foo.bar;
public class ValueClass {
private static final String SAMPLE_FIELD = "Foo " + System.getProperty("target.value");
private final myValueField;
public ValueClass() {
myValueField = "random text " + SAMPLE_FIELD;
}
public String getValueField() {
return myValueField;
}
}
と、対応するユニットテスト:
私が述べたように、私はAntのか、Eclipseを使用して実行すると、すべてが正常に動作します。私はいくつかのログ(ValueClassの静的ブロックにいくつかのログメッセージを落とす)を行い、EclipseやAntで実行すると、testGetValueFieldメソッドの実行中にクラスがロードされ、MavenではクラスがロードされるsetupBeforeClassesメソッドが実行される前のいつか。これにより、SAMPLE_FIELDが "target.value"システム・プロパティーからのヌル値で初期化されます。
すべてのヘルプは大歓迎です! ロブ
だけのMavenでこれを試してみました...だけで正常に動作します。 – Renato
IntelliJからも動作します...この問題の原因は何でも、それはMavenではないようです...あなたのPOMをクリーンアップするかもしれません、いくつかのプラグインはテストを実行する前にクラスをインスタンス化するかもしれませんか? – Renato
これは良い考えです...他のテストでValueClassを使用して他のものを検索します。 Eclipseでスタンドアロンモードでテストしていたとき、私はそのクラスを1つだけ実行していました。 –