zoukankan      html  css  js  c++  java
  • java单元测试(JUnit)

      单元测试是很重要的一个步骤。写代码的都应该会这个技能,自己写的代码自己测!

      本文说的是java的单元测试,用的是JUnit通过注解的方式来识别测试方法


    JUnit目前支持的注解有:

    下面基于IDEA介绍JUnit的基本应用

    1.首先先新建一个java项目,我们编写一个Calculator类,做一个简单的计算机功能,里面有加减乘除的方法。然后进行单元测试:

                                 

    public class Calculator {
        private static int result; // 静态变量,用于存储运行结果
        public void add(int n) {
            result = result + n;
        }
        public void substract(int n) {
            result = result - 1;  //Bug: 正确的应该是 result =result-n
        }
        public void multiply(int n) {
        }         // 此方法尚未写好
        public void divide(int n) {//除法
            result = result / n;
        }
        public void square(int n) {
            result = n * n;
        }
        public void squareRoot(int n) {
            for (; ;) ;            //Bug : 死循环
        }
        public void clear() {     // 将结果清零
            result = 0;
        }
        public int getResult(){
            return result;
        }
    }
    View Code

    2.再新建一个测试的类,这里需要引入JUnit的jar包,放心,idea直接会帮你引的。无非就是Alt+Enter的事

    import org.junit.Before;
    import org.junit.Ignore;
    import org.junit.Test;
    
    import static org.junit.Assert.assertEquals;
    import static org.junit.Assert.fail;
    
    public class CalculatorTest {
        private static Calculator cal = new Calculator();
    
        @Before
        public void setUp() throws Exception {
            cal.clear();//清空值
        }
    
        @Test
        public void testAdd() {
            cal.add(10);
            cal.add(1);
            assertEquals(11,cal.getResult());//正确
        }
    
        @Test
        public void testSubstract() {
            cal.add(3);
            cal.substract(3);
            assertEquals(0, cal.getResult());//错误在于方法上
        }
        @Ignore("Multiply() Not yet implemented")
        @Test
        public void testMultiply() {
            fail("Not yet implemented");
        }
    
        @Test(expected = ArithmeticException.class)
        public void divideByZero(){
            cal.divide(0);
        }
        @Test
        public void testDivide() {
            cal.add(5);
            cal.divide(1);
            assertEquals(5,cal.getResult());//正确
        }
        @Test(timeout = 1000)
        public void testSquareRoot() {
            cal.squareRoot(4);
            assertEquals(2,cal.getResult());
        }
    }
    View Code

    我们来静静分析一下代码:

    assertEquals(a,b); //a是期望值,a 和 b会做一个对比,不一样的话会出现报错

     

    这个就是期望的与结果不同的报错。

    右上角是说 两个测试失败,通过3个,1个测试被忽略。

    限时测试
    对于那些逻辑很复杂,循环嵌套比较深的程序,很有可能出现死循环,因此一定要采取一些预防措施。限时测试是一个很好的解决方案。我们给这些测试函数设定一个执行时间,超过了这个时间,他们就会被系统强行终止,并且系统还会向你汇报该函数结束的原因是因为超时,这样你就可以发现这些Bug了。要实现这一功能,只需要给@Test标注加一个参数即可:@Test(timeout=1000)

  • 相关阅读:
    SAP应用界面开发:1)SELECTOPTIONS对象
    ABAP工作区,内表,标题行的定义和区别
    Open SQL:6)Open SQL 增刪查改(CRUD)
    SAP应用界面开发:2)PARAMETERS对象
    Open SQL:5)Open SQL获取数据行数限制
    Open SQL:3)多个表数据连接查询
    Open SQL:4)参照内表条件进行查询
    Open SQL:7)动态WHERE条件内表
    SAP应用界面开发:3)SELECTIONSCREEN 对象(1)
    SAP应用界面开发:3)Text Elements(文本元素)对象
  • 原文地址:https://www.cnblogs.com/fzzzjjj/p/11951273.html
Copyright © 2011-2022 走看看