Java知识积累——单元测试和JUnit(一)

说起单元测试,刚毕业或者没毕业的人可能大多停留在课本讲述的定义阶段,至于具体是怎么定义的,估计也不会有太多人记得。我们的教育总是这样让人“欣 慰”。那么什么是单元测试呢?具体科学的定义咱就不去关心了,其实每个写代码的人都在时刻进行着单元测试,除非你从来不验证自己写的代码能否达到预期目 的,而是直接写完就完事儿了,连run一下都不进行。

单元测试说的直白一点,就是验证写得一段代码是否正确,可能是一个类,可能是一个函数,甚至可能是一个循环。为了测试的方便,我们一般直接就在写好的可运 行代码中直接进行测试,看到控制台输出了预想的结果或者抛出了异常。但是进入了公司,这样的测试方法极不专业也不不容易复现测试环境。那么可能需要专门写 一个测试类,调用你想测试的代码单元,然后进行测试。但是这样每次都需要新建类,编写测试用例,相当之麻烦。

说了这么多,福利来了。单元测试工具——JUnit。协助我们进行单元测试,提供诸多便利。下面介绍如何在Eclipse中利用JUnit进行单元测试。

假如,我们编写了一个Calculator,提供一些简单的计算器功能。代码如下,故意留一些bug。

 1 package org.logback.test;
 2
 3 public class Calculator {
 4
 5     private static int result;
 6     // 静态变量,用于存储运行结果
 7
 8     public void add(int n) {
 9
10     result = result + n;
11
12     }
13
14     public void substract(int n) {
15
16     result = result - 1; //Bug: 正确的应该是 result = result-n
17
18     }
19
20     public void multiply(int n) {
21
22     } // 此方法尚未实现
23
24     public void divide(int n) {
25
26     result = result / n;
27
28     }
29
30     public void square(int n) {
31
32     result = n * n;
33
34     }
35
36     public void squareRoot(int n) {
37
38     for (; ;) ; //Bug : 死循环
39
40     }
41
42     public void clear() { // 将结果清零
43
44     result = 0;
45
46     }
47
48     public int getResult() {
49
50     return result;
51
52     }
53 }

那么要对这个类在现有开发程度下进行单元测试了,方法很简单,首先在该类所属的工程名上右键进入Properties。

在弹出的Properties窗口,左侧选择Java Build Path,然后右侧选择Libraries标签卡,最后选择Add Library。

在弹出的Add Library窗口中,选择JUnit点击Next,然后在下拉菜单中选择JUnit4,点击Finish。

这样JUnit就被引入了项目的Libraries中,点击OK。在要进行测试的那个类上右键,选择new→JUnit Test Case。

在弹出的新建窗口中按如下设置,具体含义稍后讲解

这里可以选择将测试类放在专门的测试包中,并且给测试类起一个显而易见的名字。选择Next,然后进入了下图。

此处是选择要测试的方法,假如我们只测试加减乘除4个方法,则勾选对应的4个方法,点击Finish。则自动生成了一个测试类,不过我们仍需对此类进行一定的修改,将该测试类最终修改为如下代码

 1 package org.logback.test;
 2
 3 import static org.junit.Assert.*;
 4
 5 import org.junit.After;
 6 import org.junit.AfterClass;
 7 import org.junit.Before;
 8 import org.junit.BeforeClass;
 9 import org.junit.Ignore;
10 import org.junit.Test;
11
12 public class CalculatorTest {
13
14     private static Calculator example = new Calculator();
15
16     @Before//在每个测试方法执行前先执行的方法
17     public void setUp() throws Exception {
18         example.clear();
19     }
20
21     @After//在每个测试方法执行后立刻执行的方法
22     public void setDown(){
23         System.out.println("over");
24     }
25
26     @BeforeClass //在类加载的时候调用的方法,必须public和static的,只调用一次
27     public static void start(){
28         System.out.println("start class");
29     }
30
31     @AfterClass //在类结束的时候调用的方法,必须public和static的,只调用一次
32     public static void destory(){
33         System.out.println("destory class");
34     }
35
36     @Test
37     public void testAdd() {
38         example.add(2);
39         example.add(3);
40         assertEquals(5, example.getResult());
41     }
42
43     @Test
44     public void testSubstract() {
45         example.add(10);
46         example.substract(2);
47         assertEquals(8, example.getResult());
48     }
49
50     @Ignore//因该方法暂未实现而忽略测试
51     @Test
52     public void testMultiply() {
53         fail("Not yet implemented");
54     }
55
56     @Test
57     public void testDivide() {
58         example.add(8);
59         example.divide(2);
60         assertEquals(4, example.getResult());
61     }
62
63     @Test(timeout = 1000)//设置时间限制,单位是毫秒,超时即算测试失败
64     public void testsquareRoot(){
65         example.squareRoot(4);
66         assertEquals(2, example.getResult());
67     }
68
69     @Test(expected = ArithmeticException.class)//测试是否能如期抛出该异常
70     public void divideByZero(){
71         example.divide(0);//除数为0,如能正确抛出异常,则测试通过,否则测试失败
72     }
73 }

时间: 2024-08-05 14:06:06

Java知识积累——单元测试和JUnit(一)的相关文章

java知识积累——单元测试和JUnit(二)

首先来复习一下几个重要知识点,然后接着进行一些介绍.在上一篇文章中,我曾经贴过下面这张图片: 在Which method stubs would you like to create?这里,现在结合4个标注的含义来说明一下: @BeforeClass  标注的方法会在类加载的时候执行一次,且仅此一次,该方法必须是public和static的 @AfterClass   标注的方法会在类销毁的时候执行一次,且仅此一次,该方法必须是public和static的 @Before  标注的方法会在每个测

Java知识积累1-StringAlign实现文字居中左右对齐

import java.text.*;public class StringAlign extends Format{ public static final int JUST_LEFT='l'; //左对齐常量 public static final int JUST_RIGHT='r'; //右对齐常量 public static final int JUST_CENTER='c'; //居中常量 private int just; //当前的对其 private int maxChars;

项目积累——JAVA知识积累

调用天气: <iframe src="http://www.thinkpage.cn/weather/weather.aspx?uid=&c=CHXX0008&l=zh-CHS&p=CMA&a=1&u=C&s=1&m=1&x=1&d=2&fc=&bgc=&bc=&ti=1&in=1&li=2&ct=iframe" frameborder="0&

Java知识积累-XML的DOM解析修改和删除方法

import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.Transformer;import javax.xml.tr

Java知识积累3-XML的DOM解析修改和删除方法

import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.Transformer;import javax.xml.tr

JAVA知识积累 JSP第一篇【JSP介绍、工作原理、生命周期、语法、指令、行为】

JSP全名为Java Server Pages,java服务器页面.JSP是一种基于文本的程序,其特点就是HTML和Java代码共同存在! 为什么需要JSP JSP是为了简化Servlet的工作出现的替代品,Servlet输出HTML非常困难,JSP就是替代Servlet输出HTML的. 简单使用一下JSP 在idea下生成一个JSP,我们来看一下JSP长什么样子 <%@ page contentType="text/html;charset=UTF-8" language=&q

Java单元测试框架 JUnit

Java单元测试框架 JUnit JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于KentBeck的sUnit的xUnit家族中为最成功的一个. JUnit有它自己的JUnit扩展生态圈.多数Java的开发环境都已经集成了JUnit作为单元测试的工具. 在线Javadoc:http://ww...更多JUnit信息 最近更新: JUnit 4.12 发布,Java 单元测试框架 发布于4个月前 C++模拟测试框架 Google Mock

Java 单元测试及JUnit的使用

Java 单元测试: 单元测试是开发者编写的一小段代码,用于检测被测代码的一个很小的.很明确的功能是否正确.  单元测试的方法: 人工静态分析:人工阅读检测代码 自动静态分析:使用代码复查工具检查 自动动态测试:用工具自动生成测试用例并执行被测程序 人工动态测试:人工设定程序的输入和预期输出,执行程序.    Junit 单元测试: 它是人工动态测试 支持语言C++.Java,支持的IDE: Eclipse 功能:用单独的classloader来运行每个单元测试 标准的资源初始化和回收方式(se

阿里知识储备之二——junit学习以及android单元测试

一,junit框架 http://blog.csdn.net/afeilxc/article/details/6218908 详细见这篇博客 juit目前已经可以和maven项目进行集成和测试,而且貌似不需要单独引入junit的组件就可以(maven自身已经引入?) 注意一下以下几个标记 @BeforeClass,@Before,@Test(timeout = 50),@After,@Before,@Test(expected = Exception.class),@After,@Before,