嗨,我的代码覆盖率工具是声纳。我有这样的简单主要方法:-
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来调用该方法,但结果是相同的。
如果我理解正确,您正在使用SonarQube进行静态代码分析并查找测试涵盖的代码。
据我所知,SonarQube不会自己生成代码覆盖率,而是使用外部工具来完成工作。最常见的是Jacoco,它还有一个maven插件,您可以将其包含在构建中。 然后,生成的覆盖率报告可以包含在您的SonarQube分析中。 现在你的代码覆盖率应该为零,因为SonarQube不会自己进行分析。
如果您需要示例或更多信息,请随时编辑您的问题。
我得到了答案。因此,声纳在内部使用jacoco库进行代码覆盖。 在我的主要方法中,我从 args 声明变量:-
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]);
它覆盖了我的声纳。 :)