Я пишу Ant-скрипт, чтобы выполнить дополнительные проверки в моей Play! Framework Framework.
В настоящее время я выполняю свои тесты из своего Ant-скрипта, просто выполняя exec-вызов «play auto-test».
<exec executable="${play.dir}/play.bat">
<arg line="auto-test"/>
</exec>
Кто-нибудь знает, как интегрировать Clover в набор тестов Play? Очевидно, что я не привязан к тому, чтобы запускать свои тесты, используя вышеуказанное.
Я также попытался написать скрипт Ant, используя традиционный способ выполнения тестов JUnit (то есть, используя цель Ant junit
), и у меня возникли две проблемы:
- При выполнении всех моих тестов, только первый будет успешно выполнен, в то время как другие потерпят неудачу по странным причинам
- Если я просто выставлю один тест в своем наборе и успешно выполню тест, это будет означать, что охват кода составляет 0%. Затем я подумал, что неправильно настроил клевер, однако я создал простой класс, который тестировал производственный класс, который ничего не делал, и охват увеличился, как я и ожидал.
Так что, если бы я пошел по маршруту junit
, мне нужно было бы знать, как выполнить все мои тесты, чтобы они могли успешно запускаться один за другим (это работает при использовании способа запуска Play play auto-test
) и мне нужно знать, почему Clover, похоже, не воспринимает строки кода, затронутые тестами Play.
(я знаю, что есть модуль Cobertura для Play, однако я нахожу, что Clover лучше работает, сообщая мне точную цифру покрытия)
Обновление: К сожалению, я не могу воспроизвести точную ошибку, которую я получил раньше, поскольку у меня возникли проблемы с компиляцией, когда я пытаюсь скомпилировать вещи вручную. Я начал использовать модуль Secure, и он содержит только исходные файлы Java. Поэтому в моем скрипте Ant я вызываю play precompile
, который производит байт-код для модуля Secure (а также все остальное в системе, включая мой код). Поэтому теперь, когда я пытаюсь скомпилировать код своего приложения с использованием Clover, я думаю, что компилятор немного запутался, поскольку у меня есть две версии моих классов - одна, созданная командой precompile (non-clover), и одна, созданная моим собственным. сборник муравьев (с клевером):
[javac] C:\projects\testproject\out\clover\classes\clover8583527041716431332.tmp\model\HouseTest.java:45: incompatible types
[javac] found : play.db.jpa.JPABase
[javac] required: models.House
[javac] __CLR2_5_115y15ygoxiz3dv.R.inc(1527);House found = House.findById(id);
Итак, у меня сейчас две проблемы:
- Мне нужно иметь возможность скомпилировать исходный код, который также зависит от предоставляемых Play-модулей (например, CRUD, Secure), которые не имеют скомпилированных версий, поэтому я пытаюсь обойти его, вызвав
play precompile
себя в моем скрипте Ant
- Как только я начну работать с компиляцией, у меня, несомненно, снова возникнет первоначальная проблема: я не смог выполнить тесты с использованием цели
junit
.
Обновление № 2: Оказывается, ошибка, которую я получил, была вызвана вызовом findById
, требующим приведения из JPABase в House (не то, чтобы IDE или игра, казалось, заботились об этом). Поэтому после того, как я вошел и применил все методы игры "find *", я действительно получил отчеты JUnit и Clover! Однако ... Теперь я получаю два вида ошибок:
Классы сущностей, созданные в Play, можно создавать, расширяя класс Model
, который предоставляет магические методы, такие как упомянутые выше методы find
, а также метод count
. Суперкласс Model фактически расширяет GenericModel, который реализует эти методы, генерируя исключение UnsupportedOperationException. Так что, очевидно, играть! делает еще немного магии за кулисами, чтобы обеспечить фактическую реализацию этих методов. К сожалению, мои тесты (и производственный код) основаны на таких методах, как count, но они выдают исключение в моем сценарии ant / junit (примечание: все работает нормально при выполнении play auto-test
.
Другая ошибка, которую я получаю, связана с тем, что я использую модуль Spring. В одном из моих классов (корневой класс) я звоню Spring.getBeanOfType(Some.class)
. Сейчас я использую автосканирование, но в среде тестирования ant / junit модуль Spring еще не настроил мой контейнер Spring, и поэтому вызов просто возвращает ноль.
У меня такое чувство, что есть одно магическое исправление, которое решит обе мои проблемы, однако я не уверен, что это за магическое исправление.