сборка gradlew не удалась для теста задачи с плагином клевера - PullRequest
1 голос
/ 17 февраля 2020

Это простой проект, интегрированный с плагином Clover для тестового покрытия. Мы используем Mockito для модульных тестов. версия gradle

------------------------------------------------------------
Gradle 4.10.2
------------------------------------------------------------

Build time:   2018-09-19 18:10:15 UTC
Revision:     b4d8d5d170bb4ba516e88d7fe5647e2323d791dd

Kotlin DSL:   1.0-rc-6
Kotlin:       1.2.61
Groovy:       2.4.15
Ant:          Apache Ant(TM) version 1.9.11 compiled on March 23 2018
JVM:          1.8.0_241 (Oracle Corporation 25.241-b07)
OS:           Linux 4.14.35-1902.10.4.1.el7uek.x86_64 amd64

build.gradle

buildscript {
    dependencies {
        classpath 'com.bmuschko:gradle-clover-plugin:2.2.3'
    }
//....
}
apply from: "${rootDir}/build-support/coverage.gradle"

cover.gradle

apply plugin: 'com.bmuschko.clover'

dependencies {
    clover 'org.openclover:clover:4.3.1'
}
clover {
    testIncludes = ['**/*Test.java']


    report {
        html = true
        xml = true
    }
}

Проблема возникает всякий раз, когда я запускаю ./gradlew clean build без включения cover.gradle , он проходит все тестовые случаи и создает проект. тем не менее, если я включаю охват. gradle , то в некоторых тестовых случаях он будет неудачным. После того, как я откопал немного глубже, обнаружил, что у Mockito есть класс DefaultStubbingLookupListener и бросаем NPE по следующему коду:

private static List<Invocation> potentialArgMismatches(Invocation invocation, Collection<Stubbing> stubbings) {
        List<Invocation> matchingStubbings = new LinkedList<Invocation>();
        for (Stubbing s : stubbings) {
            if (UnusedStubbingReporting.shouldBeReported(s)
                && s.getInvocation().getMethod().getName().equals(invocation.getMethod().getName())
                //If stubbing and invocation are in the same source file we assume they are in the test code,
                // and we don't flag it as mismatch:
                && !s.getInvocation().getLocation().getSourceFile().equals(invocation.getLocation().getSourceFile())) {
                    matchingStubbings.add(s.getInvocation());
            }
        }
        return matchingStubbings;
    }

по вышеуказанному коду s.getInvocation (). getLocation (). getSourceFile () возвращается в ноль и поэтому выбрасывает NPE на равенство. Хотя без использования клевера ( или без покрытия. Grade ), это дает мне правильную информацию об исходном файле, например, s.getInvocation (). GetLocation (). GetSourceFile () = SomeControllerTest. java

Если я удаляю неудачные тестовые случаи, то с помощью вышеуказанной конфигурации gradle и Clover я получаю файлы colver.db и даже отчет о покрытии также генерироваться. Но эти тестовые случаи не могут быть удалены, поскольку без клевера он работает гладко. Далее я следовал нескольким документам по настройке наборов исходных кодов, но это тот же результат.

Я не могу предоставить полный код тестовых случаев по очевидным причинам, однако ниже приведен фрагмент кода, если он помогает смотреть дальше:

@Test
public void demoTestCaseCodeSnippet() {
ArrayList<String> result = getSomeArrayList();
String s1 = "text1";
String s2 = "text2";


given(commandHelper.getObjectList(any(HashMap.class), eq(String.class), eq("payloadName")))
                .willReturn(result);
given(commandHelper.getObject(any(HashMap.class), eq(String.class), eq("payloadName")))
                .willReturn(s1);
given(commandHelper.getObject(any(HashMap.class), eq(String.class), eq("payloadName")))
                .willReturn(s2); //-----(3)
verify(//some code)

}

Я знаю, что приведенный выше тестовый пример не очень помогает, но, как я уже говорил ранее, Mockito дает мне NPE, потому что sourceFile имеет значение null, я думаю, что это верно для всех тестовых случаев с плагином Clover некоторые тестовые случаи, которые пройдены только потому, что он не запускал приведенный выше фрагмент кода Mockito. Результаты одинаковы и для Gradle версий 4.10.1. Нужны помощь / предложения.

...