Как я могу использовать фильтр для emma при создании теста Android с помощью ant?

Я знаю, как использовать emma в ant при создании моего тестового проекта для Android, но я не могу найти никаких советов о том, как использовать фильтры при использовании SDK. Веб-сайт emma объясняет это при вызове emma самостоятельно, но в файлах сборки Android SDK emma не вызывается в файлах ant или в командной строке, поэтому я не могу добавить параметры фильтра.

У кого-нибудь есть предложения?


person Huupke    schedule 09.09.2011    source источник
comment
См. здесь, чтобы исключить библиотечные проекты stackoverflow.com/questions/12506396/   -  person Sababado    schedule 24.05.2013


Ответы (2)


Начиная с SDK Tools r18 вы можете просто добавить

emma.filter=-com.your.excluded.package.*

в ant.properties вашего проекта (не тестовый проект)

person Ramps    schedule 16.06.2012
comment
Да ... Жаль, что я не отследил и не опубликовал вариант фильтров emma r18 + в качестве обновления к моему ответу, так что теперь он не принят :-/ Тем не менее, я публикую обновление сейчас. - person jek; 18.06.2012
comment
Упс ... извините, я не планировал красть у вас баллы за прием - без обид. :) Я просто хотел опубликовать обновление к вашему ответу. Я боролся с проблемой, упомянутой Хуупке несколько дней назад, и нашел это решение после изучения файла sdk-tools\ant\build.xml в r18. - person Ramps; 18.06.2012
comment
Ничего страшного, это жизнь ;). На самом деле я мог бы представить, как публикую ответ, подобный вашему, хотя с моей нынешней точки зрения комментарий к ответу был бы почти беспроигрышной ситуацией (поскольку я бы проголосовал за комментарий). Но, как я уже сказал: ничего страшного. - person jek; 19.06.2012
comment
Кажется, это не работает на Android v21.1.0. Мне пришлось добавить его непосредственно в командную строку, как описано здесь - person ol_v_er; 04.03.2013

Это зависит от используемой вами версии SDK, в частности, от включенных файлов сборки, находящихся в каталоге <android-sdk>/tools/ant.

Android SDK >= 18

Начиная с SDK r18 и выше, это так же просто, как добавить свойство в файл ant.properties целевого (не тестового) проекта. Так, например, используйте

emma.filter=-*.test.*

Чтобы исключить все классы из тестового пакета. Вы можете найти синтаксис фильтра emma в документации emma.

Android SDK ‹ 18

Для этого существует проблема. Это включает в себя следующее:

  • вам нужно изменить файл сборки для вашего целевого проекта (не тестового проекта)
  • измените файл сборки, скопировав и вставив цель -emma-instrument из импортированных файлов сборки Android (вы должны найти объяснение этого метода в стандартном файле сборки проекта, который вы получаете, запустив android create/update project)
  • измените цель в соответствии со связанной проблемой, это будет выглядеть так:

    <target name="-emma-instrument" depends="compile">
        <echo>Instrumenting classes from ${out.absolute.dir}/classes...</echo>
        <!-- It only instruments class files, not any external libs -->
        <emma enabled="true">
            <instr verbosity="trace1"
                   mode="overwrite"
                   instrpath="${out.absolute.dir}/classes"
                   outdir="${out.absolute.dir}/classes">
                <filter excludes="*.R,*.R$$*,${emma.exclusion.pattern}" />
            </instr>
            <!-- TODO: exclusion filters on R*.class and allowing custom exclusion from
                 user defined file -->
        </emma>
    </target>
    
  • объяснение синтаксиса фильтра исключения доступно в документации emma.

  • либо измените модификацию, либо используйте предложенное свойство ant emma.exclusion.pattern, чтобы предоставить свои собственные исключения

Для меня это сработало как шарм на SDK tools r13.

person jek    schedule 29.11.2011
comment
В tools/ant/build.xml Android sdk R15 нет цели с именем -emma-instrument и comple, поэтому я добавил ‹filter excludes=.R,.R$$*,${ emma.exclusion.pattern} /› в оператор ‹emma›‹instr› в целевой компиляции tools/ant/build.xml, но это все еще не работает, данные о покрытии R.java все еще существуют. - person George_BJ; 30.07.2012
comment
@George_BJ Очевидно, они реорганизовали цель emma-instrument после r13, где раньше она была включена в цель компиляции. Извините, я не могу помочь с вашей проблемой, так как у меня нет r13. Итак, мы узнали, что инженеры Android довольно часто меняют/улучшают систему сборки. - person jek; 31.07.2012
comment
Спасибо за ваш ответ, я обновился до Android SDK R20 и использовал emma.filter в ant.properties. - person George_BJ; 01.08.2012
comment
Кажется, у меня не работает с SDK 19. Я повторил значение свойства для emma.filter в build.xml, чтобы проверить, правильно ли он прочитан из ant.properties, а затем проверил в файле SDK/build.xml. что он выполняет emma с ‹filter value=${emma.filter} /› - так что не уверен, что не получается. - person Andrew Mackenzie; 05.04.2014
comment
Это может иметь какое-то отношение к этому: игнорируется переопределение свойства emma.filter из ant -d - person Andrew Mackenzie; 05.04.2014