0


单元测试及JUnit的应用

相关软件包和jar包在资源里下载或者私聊我哦

一 什么是Junit

JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

Eclipse中JUnit的应用

(1)从外部导入JUnit,下载Junit.jar, 并加入到Eclipse中。

(相关的jar在资源中,请自行下载,或者私聊我)

(2)或者从eclipse的library中导入JUnit

(3)JUnit如何进行单元测试

a. 建立一个被Junit测试的类

b.建立其对应的Junit Test类,在需要建立Junit的包内右击,选择New/Junit Test Case命令

c.自动生成如下代码:

package unit.lily; 
import static org.junit.jupiter.api.Assertions.*; 
import org.junit.jupiter.api.AfterAll; 
import org.junit.jupiter.api.BeforeAll; 
import org.junit.jupiter.api.BeforeEach; 
import org.junit.jupiter.api.Test; 
import junit.framework.TestCase; 
public class TestStringUtil extends TestCase { 
@BeforeAll 
static void setUpBeforeClass() throws Exception { 
}
@AfterAll 
static void tearDownAfterClass() throws Exception { 
}
@BeforeEach 
public void setUp() throws Exception { 
}
@Test 
public void test() { 
//fail("Not yet implemented"); 
StringUtil a=new StringUtil(); 
assertEquals("aabb", a.addString("aa", "bb")); 
} 
}

(4)执行测试,右击TestStringUtil,选择Run As|JUnit Test命令

** 如果测试失败**


二 通过 FindBugs测试

(1)通过FindingBugs的在线安装打开Help->Install New Software,在Eclipse的插件安装地址中输入http://findbugs.cs.umd.edu/eclipse

(3)设置相关

(4)建立工程和相关代码

/*
     * bug 示例1
     * 新建的对象未用,且使用的低效的new string(构造方法)
     */
    String a = new String();
    /*
     * bug 示例2
     * 对象赋为null值后 没有被重新赋值
     */
    String b=null;
    /*
     * bug 示例3
     * 方法命名不规范
     */
    public void IsEquals()
    {       /*
         * bug 示例4
         * Read of unwritten field
         */
        if(b.equals("ac"))
        {        
            System.out.println("相等");    
        }
        else
            System.out.println("不相等");
      }
public String  formatRate(Double r)
    {
        /*
         * bug 示例5
         * 使用equals比较不同类型的数据,"undefined"是String类型,r是Double类型,这两个比较肯定返回false
         * ("undefined").equals(r)完全没有必要
         * 
         */
        if(r==null ||  ("undefined").equals(r))
        {return null;
        }
        return "r";
    }}

结果:


三 SourceMonitor的测试方法

(相关的软件包自行从资源里面下载或者私聊我)

Lines: 指的是代码行数

Statements:语句的行数,这个C中有所不同。

Percent Branch Statement:分支数占总语句数的百分比

Method Call Statement:方法调用语句数

Percent Lines with Comments:注释语句占总语句数的百分比

Classes and Interfaces:类和接口数

Methods per Class:每个类平均包含函数个数

Average Statements per Method:每个函数平均包含的语句个数

Line Number of Complex Method:最复杂函数的行号

Maximum Complexity:该类中最复杂函数的复杂度

Line Number of Deepest Block:最深层语句块的行号

最后总结:

我们通过单元测试工具Junit、代码静态工具FindBugs、一级代码复杂度检测工具SourceMonitor的使用,我了解到在编写和运行可重复的测试上,一些特性:如测试代码和产品代码分开。一些测试框架的编写,都可以使代码的编写更的方便;而对于代码的静态检测工具FindBugs是支持Java的,但我了解到更多的静态检测工具:像支持c++的Parasoft C++ Test,也知道了FindBugs实际是扫描和分析Java字节码(.class文件),在记忆中我加深了对软件的使用技巧;而它的安装方法有俩个,我也尝试并且掌握;而SourceMonitor则是确认项目的一些信息,包括项目名(Project Name),项目代码语言(Source Code Language),代码路径(Source Code Directory),是否检查子路径(Source Code Sub-directory)等等。

标签: 单元测试 java unity

本文转载自: https://blog.csdn.net/m0_47552180/article/details/125057826
版权归原作者 登登登__ 所有, 如有侵权,请联系我们删除。

“单元测试及JUnit的应用”的评论:

还没有评论