我有一个JUnit测试正在检查以确保自定义的xml序列化正常工作。定制的xml序列化只是Xstream的一些自定义转换器。反序列化器有效,但由于某些原因,在Eclipse 3.x中,JUnit无法进行序列化。在命令行的Ant中,它工作得很好。如果我调试并逐步执行测试用例,它在Eclipse中也可以正常工作,但如果在失败的测试用例执行后放置一个断点,它仍会失败。
是什么给出的?我有类路径问题吗?
其他一些信息:
预期:
<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();
}
}
PointUnitConversions调用执行明显的数学计算,取十进制度数并转换为组件部分的相应整数或双精度值。
它只是导致失败的最后一个位置属性。
答案 0 :(得分:3)
如果调试它可以正常工作吗?听起来像是时间问题;并调试它减慢它足以工作。你能发一些代码吗?
编辑:
感谢您添加信息。似乎如果它没有失败,当你单步执行它,但如果你只是正常运行它会失败,我敢打赌它的时间/线程问题。你是在某个线程的某个地方做这个吗?有争议吗?还是竞争条件?
答案 1 :(得分:2)
有些不同。
无法根据您发布的内容判断,但我的猜测可能是:
答案 2 :(得分:0)
可能与使用的XML库不同。找出使用的例如这个小代码:
import org.w3c.dom.Text;
public class TextTest {
public static void main(String[] args) {
System.out.println(Text.class.getResource("Text.class"));
}
}