У меня есть тест JUnit, который проверяет правильность работы настраиваемой сериализации XML. Индивидуальная сериализация XML - это всего лишь несколько настраиваемых конвертеров для Xstream. Deserializers работают, но почему-то в 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>
Actual:
<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 вызывает очевидную математику, чтобы принять десятичные градусы и преобразовать в соответствующие целочисленные или двойные значения для составных частей.
Его просто последний атрибут местоположения, который вызывает сбой.
Существует абсолютно состояние гонки. Вызов aLoc.getGeoidHeight() делает гораздо больше, чем я понял. Проблема вызвана порядком выполнения тестов. Eclipse выполняет весь набор тестов в явно случайном порядке, но в порядке Ant. –
Рад, что я смог помочь. Вы должны изучить использование JUnit setup() и teardown(), чтобы попытаться сбросить начальные условия до запуска каждого теста. Это гарантирует, что каждый тест не зависит от предыдущих условий. –
Спасибо !. Я прохожу через весь тестовый случай, чтобы найти тот, который вызывает проблему. Проблема заключается в настройке(), вещи меняются на статические члены, а затем не сбрасываются в методах teardown(). –