Классы Jacoco в связке не совпадают для транзакционных методов - PullRequest
0 голосов
/ 29 апреля 2020

Я тестирую приложение с JUnit5 и использую Jacoco для отчета о покрытии. Тесты выполнены нормально, и отчеты о тестировании присутствуют.

Однако отчет Jacoco имеет следующие журналы, если служба содержит методы, помеченные @ Transactional

[ant:jacocoReport] Classes in bundle 'my-service' do no match with execution data. For report generation the same class files must be used as at runtime.
[ant:jacocoReport] Execution data for class mypackage/SampleService does not match. 

Эта ошибка возникает для всех классов @Service методы, аннотированные @Transactional, покрытие простых классов рассчитывается нормально.

Вот пример теста:

@SpringBootTest
@ExtendWith(SpringExtension.class)
public class MyServiceTest {

    @Autowired
    private SampleService sampleService;

    @Test
    public void doWork(){
        sampleService.doWork();
    }
}

Работает нормально. Покрытие не равно нулю:

public class SampleService {

    public void doWork(){
        System.out.println("HEY");
    }
}

0% покрытия:

public class SampleService {

    @Transactional
    public void doWork(){
        System.out.println("HEY");
    }
}

Транзакционный создает прокси вокруг класса actall. Но разве не существует готового способа для Jacoco справиться с такой распространенной ситуацией?

Я попробовал аннотацию @EnableAspectJAutoProxy с различными вариантами флагов, проверил этот современный движок Jupiter и Используется плагин Jacoco

Вот конфигурация gradle:

subprojects {
    test {       
        useJUnitPlatform()
    }

    jacocoTestReport {
        afterEvaluate {
            classDirectories.from = files(classDirectories.files.collect {
                fileTree(dir: it, exclude: '*Test.java')
            })
        }

        reports {
            html.enabled = true
            xml.enabled = true
            csv.enabled = false
        }
    }
}

Любая помощь приветствуется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...