JUnit入门笔记

Posted 打不shi的流云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JUnit入门笔记相关的知识,希望对你有一定的参考价值。

[TOC]

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;
      }
    }
  2. 编译这个文件

    javac Calculator.java
    目录下出现 Calculator.class
  3. 然后编写一个Test.java文件:
    ```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.javabash

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
```
以上。

  1. 运行测试用例
# 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";
    }

}

以上。

  1. 在类名 BaobaoFeng 出,点开 quickLips:
    技术分享图片
    直接点击create:
    技术分享图片
    完成,就建立了一个BaobaoFengTest.java。可以看到,这里不支持private方法的。
    ```java
    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()`方法的返回值,可以如下:
技术分享图片
技术分享图片
技术分享图片

用JUnit测试web项目中DAO层

  1. 和上一节中的步骤2相同,可以在 Interface 上打开 quickTips,自动创建Test文件。
  2. 在Class前加@RunWith@ContextConfiguration
    ```java
    @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);
    }
    }
































以上是关于JUnit入门笔记的主要内容,如果未能解决你的问题,请参考以下文章

白盒测试(Java) - (Junit入门篇一)

AngularJS入门学习笔记一

SSM框架专题-MyBatis框架从零入门老杜版笔记(上)

一键自动生成 java junit 测试代码神器 gen-test-plugin 入门介绍

Junit 入门使用教程

Unity Shader入门精要学习笔记 - 第5章 开始 Unity Shader 学习之旅