Выполнение покрытия кода с помощью Clover on Play! Приложение Framework, использующее Ant

Я пишу сценарий Ant, чтобы выполнить несколько дополнительных проверок моей Play! Приложение Framework.

В настоящее время я выполняю свои тесты из моего Ant-скрипта, просто выполняя вызов exec для «play auto-test».

    
        
    

Кто-нибудь знает, как интегрировать Clover в набор тестов Play? Очевидно, я не привязан к необходимости запускать свои тесты, используя вышеизложенное.

Я также попытался написать сценарий Ant, используя традиционный способ выполнения тестов JUnit (то есть с использованием цели Ant junit ), и я получил два проблемы:

  • При выполнении всех моих тестов только первый будет успешно выполняться, в то время как другие не пройдут по странным причинам
  • Если я просто выставлю один тест в моем наборе и успешно проведу тест, он скажет, что у меня есть код покрытие 0%. Затем я подумал, что настроил клевер неправильно, однако я создал простой класс, который тестировал производственный класс, который ничего не делал, и охват увеличился, как я и ожидал.

Так что, если бы я спустился по 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 (например, CRUD, Secure)у которых нет скомпилированных версий, поэтому я пытаюсь обойти это, вызывая 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.

У меня есть ощущение, что есть одно волшебное исправление, которое решит обе мои проблемы, однако Я не уверен, что это за волшебное исправление.

12
задан Community 23 May 2017 в 10:00
поделиться