Я пишу сценарий Ant, чтобы выполнить несколько дополнительных проверок моей Play! Приложение Framework.
В настоящее время я выполняю свои тесты из моего Ant-скрипта, просто выполняя вызов exec для «play auto-test».
Кто-нибудь знает, как интегрировать Clover в набор тестов Play? Очевидно, я не привязан к необходимости запускать свои тесты, используя вышеизложенное.
Я также попытался написать сценарий Ant, используя традиционный способ выполнения тестов JUnit (то есть с использованием цели Ant junit
), и я получил два проблемы:
Так что, если бы я спустился по junit
, мне нужно было бы знать, как выполнять все мои тесты, чтобы они могли успешно выполняться один за другим (он работает при использовании способа воспроизведения play auto-test
), и мне нужно будет знаю, почему Clover, похоже, не подбирает строки кода, затронутые тестами Play.
(Я знаю, что для Play есть модуль Cobertura, однако я считаю, что Clover лучше справляется с сообщением мне точных цифр покрытия)
Обновление: К сожалению, я не могу воспроизвести в точности ту ошибку, которую получал раньше, так как у меня возникали проблемы с компиляцией, когда я пытался скомпилировать вещи вручную. Я начал использовать модуль Secure, и он содержит только исходные файлы Java. Поэтому в моем Ant-скрипте я вызываю play precompile
, который производит байтовый код для модуля Secure (а также для всего остального в системе, включая мой код). Итак, теперь, когда я пытаюсь скомпилировать код своего приложения с помощью Clover, я думаю, что компилятор попадает в небольшую путаницу, поскольку у меня есть две версии моих классов - одна, созданная командой прекомпиляции (не клевер), а другая, созданная мной. компиляция ant (с клевером):
[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 precompile
сам в моем Ant-скрипте junit
. Обновление №2: Оказывается, ошибка, которую я получил, была вызвана тем, что для вызова findById
требовалось преобразование из JPABase в House (не то чтобы среда IDE или игра, казалось, заботились об этом) . Итак, после того как я вошел и поставил приведение для всех методов play "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, и поэтому вызов просто возвращает null.
У меня есть ощущение, что есть одно волшебное исправление, которое решит обе мои проблемы, однако Я не уверен, что это за волшебное исправление.