2010-12-07 5 views
7

期待されるXMLの大きさと実際に受け取ったXMLを比較するテストがあります。 XMLが大きく異なる場合、実際のXMLは分析のためにディスクに書き込まれ、テストは失敗します。e JUnitテストでは、Eclipse(antではなく)で実行されているかどうかを知ることができますか?

私はEclipseでXMLをより簡単に比較できるようにassertEqualsを使用することをお勧めしますが、非常に大きなJUnitおよびCruiseControlログにつながる可能性があります。

JUnitテストの動作を、EclipseまたはAntを介して実行しているかどうかによって変更できますか?

+3

私は理由を理解していませんassertEqualsはEclipseでの比較を容易にしますか?確かにdiffツールは何をしますか? –

答えて

9

ここには2つの解決策があります。

使用して、システムのプロパティ

boolean isEclipse() { 
    return System.getProperty("java.class.path").contains("eclipse"); 
} 

使用スタックトレース

boolean isEclipse() { 
    Throwable t = new Throwable(); 
    StackTraceElement[] trace = t.getStackTrace(); 
    return trace[trace.length - 1].getClassName().startsWith("org.eclipse"); 
} 
+0

"システムプロパティを使用する"アプローチが私のために働いた、ありがとう! –

+0

@AlexR Brilliant、私の現在の呼び出しのコンテキストを判断するための例外をインスタンス化することは考えていませんでした。これは虐待のために熟していますが、完璧な場合があるようです。ありがとう。 – ArtB

0

通常、システムのプロンプトは環境によって異なります。 eclipseやantだけで設定されるシステムプロパティーを探してみてください。

BTW:eclipseの出力は同じです。つまり、eclipse用のコンソールは出力をより読みやすい形式で表示します。

個人的には、ログのサイズは気にしません。一般的に、それらを非常に長く保つ必要はなく、ディスク容量も安いです。

+0

これは、質問に対する興味深いコメントですが、間違いなく有用な答えではありません。 – dolmen

2

はい - 特定のOSGiプロパティが(例えばSystem.getProperty("osgi.instance.area"))に設定されている場合は、テストすることができます。 junitが起動している場合は、 eclipseのantで起動しても空になります。

boolean isRealTerminal() 
{ 
    // Java 1.6+ 
    return System.console() != null; 
} 
+0

Eclipse Junoの中身も空です。 :( – dolmen

+0

はorg.eclipse.osgiのために正常に動作するかもしれません..それはマグロのために働きます – Cshah

0

、それはSystem.console()の結果は、Eclipse用または端末から実行しているとの違いはのように見えますパス。

代替approchではなく"sun.java.command"をテストすることができます私のマシン上で

(OpenJDKの-8):

sun.java.command org.eclipse.jdt.internal.junit.runner.RemoteTestRunner ... 

可能テスト:

boolean isEclipse() { 
    return System.getProperty("sun.java.command") 
     .startsWith("org.eclipse.jdt.internal.junit.runner.RemoteTestRunner"); 
} 
1

あなたは、いくつかの日食jarファイルが含まれている場合はたぶん"java.class.path"アプローチが弱いことができます。Java 1.6+と

関連する問題