2010-06-14 3 views
2

Я продолжаю разработку генератора уровня сериализации. Пользователь вводит описание типов (в настоящее время в XSD или WSDL), а программное обеспечение создает код на определенном целевом языке (в настоящее время Java и ansi C89), который может представлять описанные типы и которые также могут сериализоваться (превратитесь в байтовую последовательность) и десериализуйте эти значения.Интеграция системных тестов в процессе сборки

Поскольку код генерации сложный (я имею в виду, что писать код сложно. Написание кода, который пишет код, пишет код, чтобы сделать сложную вещь, которая представляет собой совершенно новую землю твердости :)). Таким образом, в проекте, который предшествовал моему магистерскому тезису, мы решили, что нам нужны некоторые системные тесты.

Эти системные тесты знают тип и количество пар значений и байтовых последовательностей. Чтобы выполнить системный тест на определенном языке, тип запускается через систему, в результате чего код, как описано выше. Этот код затем связан с некоторым рукописным хост-кодом, который способен считывать эти пары байтовой последовательности, а значение и функции читать значения данного значения из строки. Затем исполняемый исполняемый файл запускается и пары байтов-значений подаются в этот исполняемый файл, и в целом проверяется, будут ли все такие привязки выдаваться на выход «Y». Если это так, то эти примерные значения для типа сериализуются в ранее определенную последовательность байтов, и мы можем заключить, что сгенерированный код скомпилирован и работает правильно, и, следовательно, в целом, что часть системы, обрабатывающая этот тип, верна. Это очень хорошая вещь.

Однако, сейчас я немного недоволен текущей реализацией. В настоящее время я написал пользовательский бегун junit, который использует довольно много волшебства отражения, чтобы прочитать эти привязки байтовых значений из атрибутов классов. Кроме того, общий стек для генерации кода требует большого количества шаблонов и шаблонов шаблонов, которые не более чем содержат две или три строки. Хуже того, довольно сложно добиться хорошей интеграции со всеми инструментами, которые основаны на описаниях Junits и которые генерируют отчеты об ошибках тестирования. На самом деле довольно сложно отлаживать то, что происходит, если полезный maven Junit testrunner или тестировщик eclipse тестируют все ошибки, которые компилятор бросает, просто потому, что формат этой ошибки отличается от ошибок собственных ошибок junits.

Хуже того, один сбой теста в сгенерированном коде приводит к сбою сборки maven. Это очень раздражает. Мне нравится, если сборка maven завершается с ошибкой, если какой-либо тест другого устройства выходит из строя, потому что (например), если по какой-то причине произойдет некорректное вычисление определенной очереди, все пойдет поскорее. Однако, если я просто хочу показать кому-то сгенерированный код для типа, который я знаю, работает, то это очень раздражает, если я не могу быстро создать свое приложение, потому что тип, над которым я сейчас работаю, не закончен.

Итак, учитывая этот фон, как я могу получить красивую автоматизированную систему, которая проверяет эти спецификации генерации? Возможности у меня есть considererd:

  • интегрированный раствор А Junit по-видимому, меньше, чем идеал, если я не могу улучшить интеграцию Maven и JUnit и JUnit с моим бегуна и все остальное.
  • Раньше мы использовали приспособление, но в целом сбрасывали его, потому что это вызывало больше проблем, чем решение. Основные проблемы, которые мы имели, заключались в интеграции в maven и hudson.
  • Решение с использованием texttest. Я не совсем уверен, потому что это в основном требует исполняемого файла, строки для включения stdin и строк для ожидания на stdout. Добавление всего «запускаемого приложения», ссылка на код хоста и THEN запускает сгенерированный исполняемый файл »кажется довольно сложным.
  • Дать собственное решение. Это, конечно, будет работать и делать то, что я хочу. Однако, как обычно, это будет самая трудоемкая задача.

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

ответ

0

Вы можете запустить Maven с -Dmaven.test.skip = true. У Netbeans есть способ установить это автоматически, если вы явно не нажмете одну из команд для проверки проекта, я не знаю об Eclipse.

Смежные вопросы