2009-03-11 5 views
1

У меня есть тест 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 вызывает очевидную математику, чтобы принять десятичные градусы и преобразовать в соответствующие целочисленные или двойные значения для составных частей.

Его просто последний атрибут местоположения, который вызывает сбой.

ответ

3

Он отлично работает, если вы его отлаживаете? Похоже на временную проблему; и отладка его замедляет работу настолько, чтобы работать. Можете ли вы опубликовать код?

Редактировать:
Благодарим за добавление информации. Похоже, что если он НЕ проваливается, когда вы проходите через него, но он терпит неудачу, если вы просто запускаете его нормально, я бы поставил на него вопрос о сроках/Threading. Вы делаете это в Ниге? Есть ли какие-то разногласия? Или состояние гонки?

+0

Существует абсолютно состояние гонки. Вызов aLoc.getGeoidHeight() делает гораздо больше, чем я понял. Проблема вызвана порядком выполнения тестов. Eclipse выполняет весь набор тестов в явно случайном порядке, но в порядке Ant. –

+0

Рад, что я смог помочь. Вы должны изучить использование JUnit setup() и teardown(), чтобы попытаться сбросить начальные условия до запуска каждого теста. Это гарантирует, что каждый тест не зависит от предыдущих условий. –

+0

Спасибо !. Я прохожу через весь тестовый случай, чтобы найти тот, который вызывает проблему. Проблема заключается в настройке(), вещи меняются на статические члены, а затем не сбрасываются в методах teardown(). –

2

Что-то другое.

Не могу сказать, основываясь на том, что вы в курсе, но мои догадки могут быть:

  1. Различные JVM используется Ant, командной оболочки, и Eclipse,
  2. Различные банки в CLASSPATH для Ant и Eclipse, ,
  3. Различные кодировки XML.
0

Возможно, не тот же XML-диск, который используется. Выясните, что используется, например, в этом небольшом фрагменте кода:

import org.w3c.dom.Text; 
public class TextTest { 
    public static void main(String[] args) { 
     System.out.println(Text.class.getResource("Text.class")); 
    } 
}