AFAIK eclEmma, как и многие другие системы покрытия, модифицируют ваши файлы .class, чтобы добавить инструкции покрытия. Большинство этих инструментов делают это во время компиляции, а не во время выполнения.
Вместо этого PowerMock, а также AspectJ LTW и многие другие системы манипулируют тем же байт-кодом, но во время выполнения:
PowerMock - это фреймворк, расширяющий другие фиктивные библиотеки, такие как EasyMock, более мощными возможностями. PowerMock использует пользовательский загрузчик классов и манипуляции с байт-кодами, чтобы включить моделирование статических методов, конструкторов, конечных классов и методов, частных методов, удаление статических инициализаторов и т. Д.
У меня похожая проблема как с eclEmma (различные версии), так и с Cobertura в сочетании с AspectJ LTW, потому что когда происходит изменение во время выполнения файлов .class, это каким-то образом повреждает изменение, выполненное ранее инструментом покрытия.
Я еще не нашел решения, но, по крайней мере, нашел симптом.
Правильным решением было бы отладить инструментарий PowerMock и выяснить, где и как он ломает инструменты покрытия. Для инструмента тестирования довольно сложно сломать инструменты покрытия, поскольку оба они довольно часто используются вместе:)