zoukankan      html  css  js  c++  java
  • JUnit入门笔记

    References:

    1. http://mark-yang.github.io/blog/2015/05/17/junit/
    2. JUnit官方

    Introduction

    简单介绍一下概念。

    所谓测试用例

    1. 从开发的角度,所谓测试用例,主要是方便在开发、重构过程中,对代码逻辑、编辑条件的一些测试。
    2. 如果不使用测试用例的写法,可以每个.java文件都写一个main方法进行测试。
    3. 然而,main方法测试的手段,low,并且不利于重用。
    4. 于是,在java中,常用JUnit框架,对代码进行测试。

    Java中测试基本概念

    1. 测试单元:对一个类进行测试。
    2. 建议仅对public方法进行测试。

    JUnit 踩坑

    安装

    下载 JUnit-xxx.jar (下载地址) 和 Hamcrest(点击直接下载) ,放在一个文件夹下

    第一个测试用例

    1. 按照官方推荐,编写一个java类
    public class Calculator {
      public int evaluate(String expression) {
        int sum = 0;
        for (String summand: expression.split("\+"))
          sum += Integer.valueOf(summand);
        return sum;
      }
    }
    
    1. 编译这个文件
    javac Calculator.java
    

    目录下出现 Calculator.class
    3. 然后编写一个Test.java文件:

    import static org.junit.Assert.assertEquals;
    import org.junit.Test;
    
    public class CalculatorTest {
      @Test
      public void evaluatesExpression() {
        Calculator calculator = new Calculator();
        int sum = calculator.evaluate("1+2+3");
        assertEquals(6, sum);
      }
    }
    

    以上。
    4. 编译Test.java

    # Linux or MacOS
    javac -cp .:junit-4.XX.jar:hamcrest-core-1.3.jar CalculatorTest.java
    
    # Windows
    javac -cp .;junit-4.XX.jar;hamcrest-core-1.3.jar CalculatorTest.java
    

    以上。
    5. 运行测试用例

    # Linux or MacOS
    java -cp .:junit-4.XX.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore CalculatorTest
    
    # Windows
    java -cp .;junit-4.XX.jar;hamcrest-core-1.3.jar org.junit.runner.JUnitCore CalculatorTest
    
    # 以下为输出:
    JUnit version 4.12
    .
    Time: 0.006
    
    OK (1 test)
    
    1. 让测试用例失败
      Test.java中修改assert相关项,重复 4-5,输出如下:
    JUnit version 4.12
    .E
    Time: 0.006
    There was 1 failure:
    1) evaluatesExpression(CalculatorTest)
    java.lang.AssertionError: expected:<8> but was:<6>
    	at org.junit.Assert.fail(Assert.java:88)
    	at org.junit.Assert.failNotEquals(Assert.java:834)
    	...
    FAILURES!!!
    Tests run: 1,  Failures: 1:
    

    结合 Intellij IDEA

    1. 先随便写个类,拿来测试
    package fc.learn.java.junit;
    
    public class BaobaoFeng {
    
        public void awei18shi(){
            laohanTuiche();
            guanyinzuolian();
            zhongchu();
            dulongzuan();
        }
    
        public void laohanTuiche(){
            System.out.println("laohantuiche!");
        }
    
        private void guanyinzuolian(){
            System.out.println("guanyinzuolian!");
        }
    
        private int zhongchu(){
            return 1;
        }
    
        public String dulongzuan(){
            return "dulongzuan!";
        }
    
        public String lianxuzhongchu(int param){
            if (param < 5){
                throw new IllegalArgumentException("test exception!");
            }
            return "lianxuzhongchu";
        }
    
    }
    

    以上。
    2. 在类名 BaobaoFeng 出,点开 quickLips:
    image
    直接点击create:
    image
    完成,就建立了一个BaobaoFengTest.java。可以看到,这里不支持private方法的。

    package fc.learn.java.junit;
    
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    public class BaobaoFengTest {
    
        BaobaoFeng fengbaobao;
    
        @Before
        public void setUp() throws Exception {
        }
    
        @After
        public void tearDown() throws Exception {
        }
    
        @Test
        public void awei18shi() {
        }
    
        @Test
        public void laohanTuiche() {
        }
    
        @Test
        public void dulongzuan() {
        }
    
        @Test
        public void lianxuzhongchu(){
        }
    }
    

    以上。
    3. 要测试哪个方法,就在Test.java中的对应方法编写测试用例,然后右键运行即可。
    比如我要测试dulongzuan()方法的返回值,可以如下:
    image
    image
    image

    用JUnit测试web项目中DAO层

    1. 和上一节中的步骤2相同,可以在 Interface 上打开 quickTips,自动创建Test文件。
    2. 在Class前加@RunWith@ContextConfiguration
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:/config/context/appcontext-*.xml")
    
    public class TryJunitDaoTest {
    
        @Autowired
        TryJunitDao tryJunitDao;
    
        @Test
        @Transactional  //  此处加上Transactional注解,测试完成之后会回滚
        public void insert() {
            TryJunitDto dto = new TryJunitDto();
            tryJunitDao.insert(dto)
        }
    
        @Test
        public void select() {
            TryJunitDto dto = tryJunitDao.select();
            Assert.assertNotEquals(dto, null);
        }
    }
    

    用 JUnit 模拟请求

    实际上,模拟请求,关键是Mock,和JUnit关系不是特别大。

    1. 同样,生成 Test.java 文件,然后
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = {
            "classpath:/config/spring/appcontext-*.xml",
            "file:src/main/webapp/WEB-INF/servlet-context.xml"
    })
    public class MockRequestControllerTest {
        @Autowired
        private MockRequestController mockRequestController;
    
        @Test
        public void testAcceptRequest() throws Exception {
            // 这里,构造 MockRequest
            MockHttpServletRequest request = new MockHttpServletRequest();
            request.setAttribute("user", "user");
    
            mockRequestController.acceptRequest(request);
        }
    }
    
  • 相关阅读:
    马的遍历
    01迷宫
    TF-IDF算法扫盲2
    关键字提取算法之TF-IDF扫盲
    基于高维聚类技术的中文关键词提取算法
    文本关键词提取算法
    函数查询(Function Query)
    企业级搜索引擎Solr 第三章 索引数据(Indexing Data)[1]
    企业级搜索引擎Solr 第三章 索引数据(Indexing Data)[3]
    企业级搜索引擎Solr 第三章 索引数据(Indexing Data)[2]--DIH
  • 原文地址:https://www.cnblogs.com/tflowingcloud/p/8799212.html
Copyright © 2011-2022 走看看