• java单元测试(Junit)


      JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework),供Java开发人员编写单元测试之用。 对不同性质的被测对象,如Class,Jsp,Servlet,Ejb等,Junit有不同的使用技巧。以下以Class测试为例讲解。 

       测试步骤:

      1 导入junit4相关的jar包

      (选中java工程,点击鼠标右键--->选择properties---->在窗口中选Java Build Path---->在右侧点击Add Library---->在弹出的窗口列表中选中Junit---->下一步----->Junit 4(我用的是Junit 4)---->finish)

      2 可以在要测试的类new出测试类,选setUp,next选中要测试的方法,系统会 自动生成相应测试方法,修改相应的方法里内容。

            也可以点击src--->右键--->new--->Test Junit Case

          在test方法中写测试方法。

            也可以自定义测试方法,不过要加上@Test的注解,方法格式为 public void testXXX()throws Exception{     } 

           例如:

              @Test
                public void testadd() throws Exception{
              }

      3 修改测试类(先new被测试类的实例,然后对方法进行单个测试(eg:assertEquals(8, calculator.getResult())))

      4 run as junit测试(可以显示出Outline窗口,选中要测试的测试类,在Outline中选中要测试的方法右击run as Junit test)

     代码实例:

      被测试类:

    public class Calculate {
    //加法运算
    public int sum(int x,int y){
    return x+y;
    }
    //减法运算
    public int sub(int x,int y){
    return x-y;
    }
    }

        测试类:

    import static org.junit.Assert.*;
    import junit.framework.TestCase;
    import org.junit.Test;

    public class CalculateTest extends TestCase{

    Calculate calculate = new Calculate();//先new出被测试类的实例对象
    @Override
    protected void setUp() throws Exception {
    // TODO Auto-generated method stub
    super.setUp();
    }

    @Override
    protected void tearDown() throws Exception {
    // TODO Auto-generated method stub
    super.tearDown();
    }

    @Test
    public void testSum() {
    assertEquals("测试加法", 4, calculate.sum(1, 3));//进行测试
    }

    @Test
    public void testSub() {
    assertEquals("测试减法", 2, calculate.sub(4, 3));//进行测试
    }

    }

         大家有兴趣深入研究还可以了解:

       Junit本身是围绕着两个设计模式来设计的:命令模式(JUnit Test Case)和集成模式(Junit Test Suite).

                 

       简单的说:JUnit Test Case是进行单个的方法测试。而Junit Test Suite是进行集合(集合中可以包括多个Test Cas和Test Suite)测试的。

       代码实例如下:

    Test Case单个测试:

      例如,我们要测试Money的Add方法,可以如下: 
    public class MoneyTest extends TestCase { //TestCase的子类 
    public void testAdd() { //把测试代码放在testAdd中 
    Money m12CHF= new Money(12, "CHF"); //本行和下一行进行一些初始化 
    Money m14CHF= new Money(14, "CHF"); 
    Money expected= new Money(26, "CHF");//预期的结果 
    Money result= m12CHF.add(m14CHF); //运行被测试的方法 
    Assert.assertTrue(expected.equals(result)); //判断运行结果是否与预期的相同 



      如果测试一下equals方法,用类似的代码,如下: 
    public class MoneyTest extends TestCase { //TestCase的子类 
    public void testEquals() { //把测试代码放在testEquals中 
    Money m12CHF= new Money(12, "CHF"); //本行和下一行进行一些初始化 
    Money m14CHF= new Money(14, "CHF"); 

    Assert.assertTrue(!m12CHF.equals(null));//进行不同情况的测试 
    Assert.assertEquals(m12CHF, m12CHF); 
    Assert.assertEquals(m12CHF, new Money(12, "CHF")); // (1) 
    Assert.assertTrue(!m12CHF.equals(m14CHF)); 




      当要同时进行测试Add和equals方法时,可以将它们的各自的初始化工作,合并到一起进行,形成测试基础,用setUp初始化,用tearDown清除。如下: 
    public class MoneyTest extends TestCase {//TestCase的子类 
    private Money f12CHF;//提取公用的对象 
    private Money f14CHF; 

    protected void setUp() {//初始化公用对象 
    f12CHF= new Money(12, "CHF"); 
    f14CHF= new Money(14, "CHF"); 

    public void testEquals() {//测试equals方法的正确性 
    Assert.assertTrue(!f12CHF.equals(null)); 
    Assert.assertEquals(f12CHF, f12CHF); 
    Assert.assertEquals(f12CHF, new Money(12, "CHF")); 
    Assert.assertTrue(!f12CHF.equals(f14CHF)); 


    public void testSimpleAdd() {//测试add方法的正确性 
    Money expected= new Money(26, "CHF"); 
    Money result= f12CHF.add(f14CHF); 
    Assert.assertTrue(expected.equals(result)); 

    Test Suite集合测试:

    public class MoneyTest extends TestCase {//TestCase的子类 
    .... 
    public static Test suite() {//静态Test 
    TestSuite suite= new TestSuite();//生成一个TestSuite 
    suite.addTest(new MoneyTest("testEquals")); //加入测试方法 
    suite.addTest(new MoneyTest("testSimpleAdd")); 

    suite.addTest(new MoneyTest(MoneyTest.class)); //以类为参数 
    return suite; 

    }  

     

  • 相关阅读:
    ffmpeg推流
    linux nfs挂载根文件系统失败
    ffmpeg nginx rtmp推流
    sql 随机生成NewId
    C#/.NET 异步操作会生成新线程吗
    SQLServer的数据库邮件和SQLServer代理(作业)
    C# ThreadPool类(线程池)
    SQL Server查看执行计划
    从0开始基于Webpack5 搭建HTML+Less 前端工程
    Vue 父子级的相互调用
  • 原文地址:https://www.cnblogs.com/dxx-blogs/p/4419741.html
Copyright © 2020-2023  润新知