Как ProGuard влияет на стратегию тестирования? - PullRequest
5 голосов
/ 23 ноября 2011

Мне нужно было недавно представить ProGuard на Android из-за проблем со Scala на Android. Мне нужна ProGuard для его функции сжатия, которая удаляет классы, которые предположительно не используются. Я очень обеспокоен влиянием удаления классов на тестируемость.

В настоящее время я пишу модульные тесты, которые выполняются на хосте, и приемочные тесты, которые запускают полностью интегрированное приложение на платформе Android.

Как правило, мне было бы удобно с относительно полным охватом модульных тестов и точечным приемочным тестированием. Однако, учитывая, что в моем коде я интенсивно использую внедрение зависимостей Guice, до сих пор у меня был опыт, что ProGuard удаляет код способом, который мне сложно предсказать. Из-за этого очень вероятно, что я буду вносить ошибки.

Это наводит меня на мысль, что мне нужно написать приемочные / платформенные тесты, которые обеспечат полное покрытие, потому что в любой момент может отсутствовать класс.

Есть ли у других такой опыт? Если да, то какова была ваша стратегия тестирования? Или с опытом вы становитесь более уверенными в том, что классы, которые удаляет ProGuard, действительно не нужны?

Ответы [ 2 ]

2 голосов
/ 24 ноября 2011

ProGuard не будет ломать ваше приложение, пока оно не попытается использовать отражение или Class # forName для удаленных классов и / или запутанных членов.

По моему опыту (с запутанным Scala на Android тоже) действительно легкоОпределите проблемы, вызванные ProGuard, для вашего Android-приложения, используя простые тесты дыма.Вы знаете, какие библиотеки вы включаете в свой проект.Если некоторые из них используют отражение или Class # forName - выполните для них тест на дым.Затем исключите необходимые классы / члены из конфигурации ProGuard.

Помните также, что вы можете автоматизировать тестирование своего запутанного проекта, используя ActivityInstrumentationTestCase2 и эмулятор.Если вы планируете использовать ProGuard в своем проекте, всегда проводите тестирование инструментов на запутанном APK.

В заключение - не бойтесь.Проблемы, связанные с ProGuard, легко обнаружить.

2 голосов
/ 23 ноября 2011

Мы проводим модульное тестирование и "полностью" тестируем наше приложение ProGuard уже довольно давно, и у нас не было "настоящих" проблем.Единственные проблемы, с которыми мы сталкиваемся, - это когда мы используем в наших тестах некоторые библиотечные методы, которые не используются в основном приложении;в этих случаях ProGuard удалит код из библиотек, и нам придется вручную добавить определенные методы к proguard.cfg.

О, и мы также используем Guice:)

...