今日内容

1.1Junit单元测试
1.2.反射
1.3.注解

Junit单元测试:

测试分类:

1.黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值
(非常简单,不用关注具体逻辑)

2.白盒测试:需要写代码的。关注程序具体的执行流程。(junit是白盒的一种)

3.两种测试的主要区别
都要关注输出是否符合期望,主要区别就是白盒测试你需要去关注程序的流程,白盒测试需要写代码,黑盒测试只需要点点点,现在社会上的测试人员大多都是黑盒测试,希望大家能成为白盒测试工程师。



在用这个计算器类之前,要测试一下。

缺点,很不方便:1.测试类要和被测试类放一起 2.每次测试一个方法,都要把其他的方法注释掉,以免产生干扰

Junit使用:白盒测试

*步骤:1,定义一个测试类(测试用例)
      	 *建议:
				*测试类名:被测试的类名 +Test 	如CalculatorTest
				*包名:xxx.xxx.xx.test 	如cn.itcast.test 	 	


	2,定义测试方法:可以独立运行

		*建议:
				*方法名:test测试的方法名	testAdd()
				*建议返回值:void
				*建议参数列表:空参
				完全的独立运行,不用返回值,不用传参

	3.给方法加上@Test

	4.导入Junit依赖

* 判定结果:
			红色:失败
			绿色:成功
			
* 一般我们会使用断言操作来处理结果
Assert.assertequals(期望结果,运算结果result);

最基本的测试类
程序测试成功

使用Junit一般不看打印结果,而是看红色(错误)还是绿色(成功)

  • 一般不用输出,而是采用断言的方式
    Assert有很多函数,
    Assert.ossertEquals(3,result);//断言result为3

    白窗模糊界面是黑马网课界面
    黑窗是我本人的界面。然后改了一下皮肤,前面的看不清
    再测试一下减法。建议先看黑马网课,看一会,敲一会,因为她有很多快捷的敲代码方法

第一节课结束,展示文件目录和代码

Calculator测试类

package cn.itcast.test;

import cn.itcast.junit.Calculator;
import org.junit.Assert;
import org.junit.Test;

public class CalculatorTest {

    //老版本,用 main 函数来测试方法
//    public static void main(String[] args){
//
//        //创建对象
//        Calculator calculator = new Calculator();
//
//        //调用
//        /*
//        int result = calculator.add(1, 2);
//        System.out.println(result);//3,正确
//        */
//        /*
//        int result = calculator.sub(1, 1);
//        System.out.println(result);//0,正确
//        */
//    }
    /**
     * 测试 add 方法
     */
    @Test
    //Alt + Enter 添加 Junit 依赖
    public void testAdd(){
        //System.out.println("我被执行了"); //我被执行了
        //1.创建计算器对象
        Calculator calculator = new Calculator();
        //调用add方法
        int result = calculator.add(1, 2);
        //System.out.println(result); // 3
        //3.断言,我断言整个结果为3
        Assert.assertEquals(3, result);
    }

    @Test
    public void testSub(){
        //1.创建计算器对象
        Calculator calculator = new Calculator();
        int result = calculator.sub(1, 2);
        Assert.assertEquals(-1, result);
    }
}
package cn.itcast.junit;

//psvm这里不用写主函数
public class Calculator {

    /**
     * 加法
     * @param a
     * @param b
     * @return
     */
    //当你把方法写好后,移到方法的上面,然后敲入/**,一回车就出来了
    public int add ( int a , int b ){

        //return a + b ;
        //故意写错
        return a + b ;

    }
    
    /**
     * 减法
     * @param a
     * @param b
     * @return
     */
    public int sub ( int a , int b ){
        return a - b ;
    }
}
  • 补充:
    @Before:修饰的方***在测试方法之前被自动执行
    @After:修饰的方***在测试方法执行之后自动执行。
package cn.itcast.test;

import cn.itcast.junit.Calculator;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class CalculatorTest {

    /** * 初始化方法: * 用于资源申请,所有测试方法在执行之前都会先执行该方法 */
    @Before
    public  void  init(){
        System.out.println("init...");
    }

    /** * 释放资源方法: * 在所有测试方法都执行完以后,都会自动执行该方法 */
    @After
    public void close(){
        System.out.println("close...");
    }

    /** * 测试 add 方法 */
    @Test
    //Alt + Enter 添加 Junit 依赖
    public void testAdd(){
        //System.out.println("我被执行了"); //我被执行了
        System.out.println("testAdd...");
        //1.创建计算器对象
        Calculator calculator = new Calculator();
        //调用add方法
        int result = calculator.add(1, 2);
        //System.out.println(result); // 3
        //3.断言,我断言整个结果为3
        Assert.assertEquals(3, result);
    }


    @Test
    public void testSub(){
        //1.创建计算器对象
        Calculator calculator = new Calculator();
        int result = calculator.sub(1, 2);
        System.out.println("testSub...");
        Assert.assertEquals(-1, result);
    }

}