カスタマイズされたxmlシリアル化が正しく機能していることを確認するためのJUnitテストがあります。カスタマイズされたxmlシリアル化は、Xstream用のカスタムコンバータのほんの一部です。デシリアライザは機能しますが、Eclipse 3.xでは何らかの理由でJUnitがシリアル化に失敗します。コマンドラインのAntでは、うまくいきます。テストケースをデバッグしてステップ実行すると、Eclipseでもうまく動作しますが、テストケースが実行された後にブレークポイントを置くと、テストは失敗します。なぜjunitテストはeclipseで失敗しますが、antからはパスしますか?
何がありますか?クラスパスの問題がありますか?
いくつかの追加情報:予想
:実際
<site>
<name>origin</name>
<version>0.6.0</version>
<description>Stuff</description>
<source>./fake-file.xml</source>
<location>
<latitude deg="44" min="26" sec="37.640"/>
<longitude deg="-57" min="-38" sec="-6.877"/>
<ellipsoid-height value="-79.256" units="meters"/>
<geoid-height value="0.000" units="meters"/>
</location>
</site>
:
<site>
<name>origin</name>
<version>0.6.0</version>
<description>Stuff</description>
<source>./fake-file.xml</source>
<location>
<latitude deg="44" min="26" sec="37.640"/>
<longitude deg="-57" min="-38" sec="-6.877"/>
<ellipsoid-height value="-79.256" units="meters"/>
<geoid-height value="-79.256" units="meters"/>
</location>
</site>
場所フィールドを書き込むコード:
public void marshal(Object source,
HierarchicalStreamWriter writer,
MarshallingContext context)
{
ILatLonEllipsoidHeightPoint aLoc = (ILatLonEllipsoidHeightPoint) source;
synchronized(aLoc)
{
writer.startNode(LATITUDE);
writer.addAttribute(DEGREES,
Integer.toString(
PointUnitConversions.getLatitudeHours(aLoc.getLatitude())));
writer.addAttribute(MINUTES,
Integer.toString(
PointUnitConversions.getLatitudeMinutes(aLoc.getLatitude())));
writer.addAttribute(SECONDS,
String.format("%.3f",
PointUnitConversions.getLatitudeSeconds(aLoc.getLatitude())));
writer.endNode();
writer.startNode(LONGITUDE);
writer.addAttribute(DEGREES,
Integer.toString(
PointUnitConversions.getLongitudeHours(aLoc.getLongitude())));
writer.addAttribute(MINUTES,
Integer.toString(
PointUnitConversions.getLongitudeMinutes(aLoc.getLongitude())));
writer.addAttribute(SECONDS,
String.format("%.3f",
PointUnitConversions.getLongitudeSeconds(aLoc.getLongitude())));
writer.endNode();
writer.startNode(ELLIPSOID_HEIGHT);
writer.addAttribute(VALUE,
String.format("%.3f", aLoc.getEllipsoidHeight()));
writer.addAttribute(UNITS, METERS);
writer.endNode();
writer.startNode(GEOID_HEIGHT);
writer.addAttribute(VALUE,
String.format("%.3f", aLoc.getGeoidHeight()));
writer.addAttribute(UNITS, METERS);
writer.endNode();
}
}
PointUnitConver sions呼び出しは明示的な計算を行い、小数点以下の桁数を取得し、コンポーネントの部分の対応する整数値またはdouble値に変換します。
障害を引き起こしているロケーションの最後の属性。
絶対に競合状態があります。 aLoc.getGeoidHeight()の呼び出しは、私が実現した以上に多くのことを行います。この問題は、実行されるテストの順序によって発生します。 Eclipseは、明らかにランダムな順序でテストスイート全体を実行しますが、Ant順序が定義されています。 –
私は助けてくれてうれしいです。 JUnit setup()およびteardown()を使用して、各テストを実行する前に初期条件を試してリセットする必要があります。それはすべてのテストが以前の条件から独立していることを確認します –
ありがとうございました!私は問題の原因となっているものを見つけるためにすべてのテストケースを通して自分の道を進んでいます。問題はsetup()にあり、静的メンバーで変更された後、teardown()メソッドでリセットされません。 –