Почему тест junit не проходит в затмении, но проходит от муравья? - PullRequest
1 голос
/ 11 марта 2009

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

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

Ответы [ 3 ]

3 голосов
/ 11 марта 2009

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

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

2 голосов
/ 11 марта 2009

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

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

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

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

import org.w3c.dom.Text;
public class TextTest {
    public static void main(String[] args) {
        System.out.println(Text.class.getResource("Text.class"));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...