你好朋友,
如果编写好的代码很重要,那么编写覆盖所有业务逻辑的优良Junit测试用例也同样重要。通过编写覆盖业务逻辑的Junit测试用例,我们实际上确保代码的每种方法都能正常工作按照预期进行,因此减少了在软件开发的后期阶段中获取错误的机会。
在本教程中,我们将看到如何使用EclEmma插件来检查Java代码的代码覆盖率,从而可以确保通过Junit测试用例具有良好的覆盖率。
步骤1 :
转到以下链接:
https://www.eclemma.org/
第2步 :
单击左侧菜单上的安装->下载选项。
第三步:
右键单击最顶部(最新)链接(在撰写本文时,它是“ eclemma-3.1.2.zip”),然后将Zip保存在您的计算机上。
第四步 :
将zip提取到您选择的相同位置。
步骤5:
复制提取的文件夹并转到eclipse文件夹(安装了eclipse的位置),然后将此提取的文件夹粘贴到eclipse文件夹内的dropins文件夹中。
步骤6:
重新启动Eclipse。
步骤7:
右键单击项目文件夹,然后选择Coverage As-> JUnit Test,然后单击Coverage按钮,它将运行所有测试用例并检查覆盖率。
现在,因为在此阶段,我们在服务层的代码中没有任何测试用例,所以我们获得了0.0%的覆盖率,并且所有代码行都显示为红色,这意味着Junit测试中未覆盖这些行。
一般来说 :
如果看到绿色,则表示Junit测试中覆盖了所有这些线条。
如果看到红色,则表示Junit测试未覆盖所有这些行。
如果看到黄色,则表示您的测试已经通过了这些行,但是并未涵盖所有的测试用例。
接下来,我们将创建一个Spring Boot项目,在其中添加一些代码,然后逐步编写测试用例,并查看EclEmma插件如何提供代码覆盖率。
第八步:
让我们通过创建一个简单的名称为“ eclemma”的Spring Boot项目来了解它的工作原理。请按照我的教程“ 如何使用Spring Initializer创建Spring Boot项目来创建Spring Boot项目”。
步骤9:
在新创建的项目中,按照以下屏幕快照创建具有名称的包和类
第十步:
这是CalculatorService的源代码
package com.blogspot.javasolutionsguide.eclmma.service; /** * @author JavaSolutionsGuide * */ public interface CalculatorService { int add( int a , int b); int subtract( int a, int b); }
<br>
<br>
<br>
这是CalcualtorServiceImpl的源代码
package com.blogspot.javasolutionsguide.eclemma.service.impl; /** * @author javaSolutionsGuide * */ public class CalculatorServiceImpl { public int add( int a , int b) { int c = a + b; return c; } public int subtract( int a, int b) { int c = a - b; return c; } }
步骤11:
因此,首先我们将只为add()方法编写测试用例,然后运行Eclemma coverage
这是add()方法的JUnit测试用例的代码:
package com.blogspot.javasolutionsguide.eclEmma.service.impl; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import com.blogspot.javasolutionsguide.eclemma.service.impl.CalculatorServiceImpl; /** * @author JavaSolutionsGuide * */ @RunWith (SpringRunner. class ) @SpringBootTest (classes = {CalculatorServiceImpl. class }) public class CalculatorServiceImplTest { @Autowired private CalculatorServiceImpl calculatorService; @Test public void add_for_givenTwoInteger_shouldReturn_sumOfTwo() { Assert.assertEquals( "Test case to check if add returns sum of two give positive numbers" , 3 , calculatorService.add( 1 , 2 )); } }
<br>
<br>
<br>
第十二步:
现在,让我们再次运行EclEmma Coverage并查看结果:
可以看到,CalculatorServiceImpl类的覆盖率从0.0%增加到60%,并且运行覆盖率后,add()方法的代码行现在变为绿色,这意味着这些行已被Junit测试覆盖。
步骤13:
同样,我们将为减法编写所有测试用例并查看覆盖率。
在CalculatorServiceImplTest.java中添加以下测试用例:
@Test public void subtract_for_givenTwoInteger_shouldReturn_differenceOfTwo() {
Assert.assertEquals( "Test case to check if subtract returns sum of two give positive numbers" , 1 , calculatorService.subtract( 2 , 1 )); }
正如我们现在看到的,CalculatorServiceImpl类的覆盖率是100%。
摘要
因此,在本教程中,我们学习了如何使用EclEmma插件查看您代码的Junit测试覆盖率。基于Junit代码覆盖率报告,我们可以找到Junit覆盖了我们代码的哪些部分,而仍然左,然后我们可以为未发现的代码行编写更多的测试用例,这将确保我们已通过Junit涵盖了所有必需的代码行,从而提高了代码质量。
如果您喜欢阅读本文,请与您认为有帮助的朋友,同事分享。
翻译自: https://www.javacodegeeks.com/2019/08/integrate-use-eclemma-plugin-having-good-junit-coverage.html