zoukankan      html  css  js  c++  java
  • Junit进行单元测试

    Junit提供 单元测试,多组参数的单元测试,打包单元测试。

    比如你写了一个Calculator类:

    package test_junit;
    
    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;
        }
    }

    写完了想测试下:

    选择想测试的类右键new,junit,选择想测试的方法

    生成一个test类,把这个测试类补充完整:

    package test_junit;
    
    import static org.junit.Assert.*;
    
    import org.junit.After;
    import org.junit.AfterClass;
    import org.junit.Before;
    import org.junit.Ignore;
    import org.junit.Test;
    
    public class CalculatorTest {
    
        private static Calculator calculator = new Calculator();
    
        @AfterClass
        public static void tearDownAfterClass() throws Exception {
        }
    
        @Before
        public void setUp() throws Exception {
        }
    
        @After
        public void tearDown() throws Exception {
        }
    
        @Test
        public void testAdd() {
            calculator.add(2);
            calculator.add(3);
            assertEquals(5, calculator.getResult());
            // fail("Not yet implemented");
        }
    
        @Ignore
        public void testSubstract() {
            calculator.clear();
            calculator.add(10);
            calculator.substract(2);
            assertEquals(8, calculator.getResult());
        }
    
        @Test
        public void testMultiply() {
            // fail("Not yet implemented");
        }
    
        @Test
        public void testDivide() {
            calculator.clear();
            calculator.add(8);
            calculator.divide(2);
            assertEquals(4, calculator.getResult());
        }
    
        @Test(timeout = 12)
        public void testSquareRoot() {
    
            calculator.squareRoot(8);
    
            // assertEquals(4,calculator.getResult());
        }
    
        //@Test(expected = ArithmeticException.class)
        @Test
        public void divideByZero() {
            calculator.divide(0);
    
        }
    }

    运行下这个类,就可以看到可视化对错的效果。

    如果这个类的某个方法有多组测试数据,那么可以这么写。

    package test_junit;
    
    import static org.junit.Assert.*;
    
    import org.junit.After;
    import org.junit.AfterClass;
    import org.junit.Before;
    import org.junit.Test;
    
    import static org.junit.Assert.assertEquals;
    
    import org.junit.Test;
    
    import org.junit.runner.RunWith;
    
    import org.junit.runners.Parameterized;
    
    import org.junit.runners.Parameterized.Parameters;
    
    import java.util.Arrays;
    
    import java.util.Collection;
    
    @RunWith(Parameterized.class)
    public class CalculatorTest2 {
    
        private static Calculator calculator = new Calculator();
    
        private int param;
    
        private int result;
    
        @Parameters
        public static Collection data() {
    
            return Arrays.asList(new Object[][] {
    
            { 2, 4 },
    
            { 0, 0 },
    
            { -3, 9 },
    
            });
    
        }
    
        // 构造函数,对变量进行初始化
    
        public CalculatorTest2(int param, int result) {
    
            this.param = param;
    
            this.result = result;
    
        }
    
        @Test
        public void square() {
    
            calculator.square(param);
    
            assertEquals(result, calculator.getResult());
    
        }
    
    }

    这时,你可能已经写了十来个测试类了,但是一个一个是比较麻烦的,这时多重选择想要的那几个测试类,右键new ->junit -> Junit Test Suits就可以打包了。

    package test_junit;
    
    import org.junit.runner.RunWith;
    import org.junit.runners.Suite;
    import org.junit.runners.Suite.SuiteClasses;
    
    @RunWith(Suite.class)
    @SuiteClasses({ CalculatorTest.class, CalculatorTest2.class })
    public class AllTests {
    
    }

    直接运行这个类就可以一起测试了。

    参考:http://blog.csdn.net/andycpp/article/details/1329218

  • 相关阅读:
    JSP前三章测试改错
    实现文件上传
    Url和Uri的区别
    四套读写文件方案
    C++第一课
    数据聚合架构模式
    高并发怎么解决?
    为什么做不了软件架构师
    完整版go-mysql-elasticsearch安装步骤
    安装GO
  • 原文地址:https://www.cnblogs.com/huhuuu/p/4206662.html
Copyright © 2011-2022 走看看