Sonarcube не покрывает код для основного - PullRequest
0 голосов
/ 29 июня 2018

Привет, мой инструмент покрытия кода - сонар. У меня есть простой основной метод, как это: -

public class MAIN {

    public static void main(String[] args) 
    {
        //System.setProperty("hadoop.home.dir", "C:\\software\\winutils");

        //args[0]:- location of the input file args[1]:- ingest date args[2]:- source
        //args[3]:-location of the output file args[4]:-location of the Error file
        //args[5]:-Type of the input file args[6]:-Type of the output file
        String input = args[0];
        String ingestDate = args[1];
        String source=args[2];
        String output=args[3];
        String error=args[4];
        String inputFileType=args[5];
        String outputType=args[6];
    }

}

тестовый класс для этого: -

 public class MyTest {

    private String inputFilePath;
    private String inputFileType;
    private String ingestDate;
    private String source;
    private String outputPath;
    private String errorPath;
    public Main driver;

    @Test(expected=IndexOutOfBoundsException.class)
    public void testMainIncorrectArgs() throws IOException{
        //String[] args = {inputFilePath, inputFileType, ingestDate, source, outputPath, errorPath};
        driver = new MAIN();
        driver.main(new String[]{inputFilePath, inputFileType, ingestDate, source, outputPath, errorPath});
    }

}

когда я делаю покрытие кода, инструмент sonarcube не включает покрытие кода основного класса. Я пытался с PowerMockito и Reflection Api вызвать метод, но результат тот же.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Я получил ответ. Таким образом, Sonar использует библиотеку Jacoco для покрытия кода. В моем основном методе я объявлял переменную из аргументов: -

String input = args[0];
String ingestDate = args[1];
String source=args[2];
String output=args[3];
String error=args[4];
String inputFileType=args[5];
String outputType=args[6];

Таким образом, этот код не включен в покрытие кода согласно документу jacoco. наконец я изменил свой код, используя pojo: -

 String input = setInput(args[0]);
    String ingestDate = setInput(args[1]);
    String source    = setInput(args[2]);
    String output    = setInput(args[3]);
    String error     = setInput(args[4]);
    String inputFileType= setInput(args[5]);
    String outputType = setInput(args[6]);

Который накрыл мой сонар. :)

0 голосов
/ 29 июня 2018

Если я правильно вас понял, вы используете SonarQube для статического анализа кода и ищете ваш код, на который распространяются тесты.

Насколько я знаю, SonarQube не создает покрытие кода самостоятельно, а использует внешние инструменты, которые выполняют эту работу. Наиболее распространенным является Jacoco , который также имеет плагин maven, который вы можете включить в свою сборку. Сформированный отчет о покрытии может быть включен в анализ SonarQube. Прямо сейчас ваше покрытие кода должно быть на нуле, так как SonarQube не выполняет анализ самостоятельно.

Если вам нужны примеры или дополнительная информация, не стесняйтесь редактировать свой вопрос.

...