• Java进阶API第二章


    Java进阶API第二章

     一. 抛出企业问题,脱离main测试,模块化编程

    1.学校里如何测试的

    1. //学校教的测试方法
    2. public static void main(String[] args) {
    3. //2.本地测试
    4. //3.调用函数
    5. //4.看输出,查看结果是否符合预期
    6. //5.预期结果和测试结果是通过人工计算的
    7. }
    8. //1.编写功能函数(方法)

    2.企业里如何测试的

    首先了解main,main是一个程序的入口点,而不应该是处理逻辑或者功能模块的点,main方法中的语句不应该有逻辑性的语句,而且代码应该是非常之少的,更复杂的东西不应该出现在main里,应该抽离main。main方法就是进入程序的一扇门,而这个门只负责开和关,打开门可以实现某些功能,但这些功能只由门里面的东西来决定,而不是门 。 

    然后引入测试框架:JUnit

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

    最后了解单元测试的概念:

    1.单元测试指的是对软件中的独立单元进行测试,以验证这些单元的行为是否符合设计预期。这些单元可以是函数、类、方法或其他代码片段,测试可以通过手动或自动的方式进行。

    2.单元测试可以帮助开发人员发现和修复代码中的缺陷,减少代码的错误率,提高代码质量,同时也有助于开发人员理解代码的功能和细节。通过不断地进行单元测试,开发人员可以确信所开发的软件在某种程度上比较健壮,并且能够快速地发现并修复任何错误,从而保障软件的质量和可靠性。

    二.如何使用Junit框架

    1.Junit的下载与引入

     Junit框架下载网站:Maven Repository: junit » junit (mvnrepository.com)icon-default.png?t=N7T8https://mvnrepository.com/artifact/junit/junit

    选择版本号,我选择最新版,你也可以选择其他版本,点击jar下载: 

    如果是新版本要下载依赖

     

     Junit的引入: 

    右键单击jarAdd as library ... ,点击OK

    如果是新版本依赖也要引入 

     

    2.Junit的使用

    在企业中会创建一个专用与测试的包(文件夹),并创建一些需要测试的类(创建一个类专门用来对另外一个类做测试),且是一对一的关系,这就是单元测试。

    我们在此处为了方便,不创建包:

    需要测试类: 

    1. package com.google.apl;
    2. public class Calc {
    3. public static int sum (int numberA, int numberB){
    4. return numberA + numberB;
    5. }
    6. }

    测试类:

    1. package com.google.apl;
    2. public class CalcTest {
    3. public void sum(){
    4. int sum = Calc.sum(1,2);
    5. System.out.println("sum = " + sum);
    6. }
    7. }

    如果你仔细观察,你会发现无法运行此类,所以需要引入Junit,在方法上面输入@Test。

    1. package com.google.apl;
    2. import org.junit.Test;
    3. public class CalcTest {
    4. @Test //使用这条注释来调用函数,我们后期会讲注释
    5. public void sum(){
    6. int sum = Calc.sum(1,2);
    7. System.out.println("sum = " + sum);
    8. }
    9. }

    如果没有安装依赖会出现此类问题:

    正确的运行结果如下:

     

     

    三.Assert断言 

     遗留问题:测试的结果还是人工计算,并不是计算机帮忙完成的。这时就要用到Junit的断言测试方法Assert.assertEquals(),用来比较预期值与结果的差别。

    1. package com.google.apl;
    2. import org.junit.Assert;
    3. import org.junit.Test;
    4. public class CalcTest {
    5. @Test //使用这条注释来调用函数,我们后期会讲注释
    6. public void sum(){
    7. int sum = Calc.sum(1,2);
    8. // 断言
    9. Assert.assertEquals(4,sum);
    10. // 4为预取结果,sum为实际结果
    11. }
    12. }

    运行后可以发现错误。

    1. package com.google.apl;
    2. import org.junit.Assert;
    3. import org.junit.Test;
    4. public class CalcTest {
    5. @Test //使用这条注释来调用函数,我们后期会讲注释
    6. public void sum(){
    7. int sum = Calc.sum(1,2);
    8. // 断言
    9. Assert.assertEquals(3,sum);
    10. // 4为预取结果,sum为实际结果
    11. }
    12. }

    没有输出,结果正确。 

     

    问题: 预期结果还是人为计算的。

    解决:引入第一章学的随机数类:

    1. package com.google.apl;
    2. import org.junit.Assert;
    3. import org.junit.Test;
    4. import java.util.concurrent.ThreadLocalRandom;
    5. public class CalcTest {
    6. @Test //使用这条注释来调用函数,我们后期会讲注释
    7. public void sum(){
    8. int numberA = ThreadLocalRandom.current().nextInt(-99999999);
    9. int numberB = ThreadLocalRandom.current().nextInt(-99999999);
    10. int sum = Calc.sum(numberA,numberB);
    11. // 断言
    12. Assert.assertEquals(numberA + numberB,sum);
    13. }
    14. }

     

     

    使用Junit的好处可以模块化测试,错误的模块报出错误,正确的模块通过。

  • 相关阅读:
    JuiceFS CSI:Mount Pod 的平滑升级及其实现原理
    SVG—初识1
    编程获取图像中的圆半径
    Http代理与socks5代理有何区别?如何选择?(二)
    Leetcode148. 排序链表
    C语言for语句
    QT学习day5(QT实现TCP协议)
    精彩回顾|云原生 Meetup 广州站
    大疆智图、CC生产了多份数据,如何合并为一份在图新地球进行加载
    安装Photon虚拟机
  • 原文地址:https://blog.csdn.net/2301_76556912/article/details/134241762