Junit 使用

由于 JUnit 在平时 Java 开发的过程中用得比较多,网上这部分详细介绍的也不多,找了点资料整理一下一些开发中常用的 JUnit 测试使用方法。里面我都故意使断言出错,错误详细信息我就不贴了,执行看看就清楚了。

[b]JUnit 简介[/b]
针对写好的 Java 程序进行测试,一般的测试方式通常依赖于人工对输入结果的判断,缺少效率且难以组织,可以使用 JUnit 提高测试效率,
JUnit 用途是单元测试,针对包中的类和方法进行测试,找出程序中存在的问题或者 bug。

[b]JUnit 特性[/b]
对预期结果的断言
用于共享测试数据的的测试工具
便于组织执行测试的测试套件
图形和文字的测试界面

[b]简单断言测试[/b]
import junit.framework.Assert;

public class Student {
private int number;
private String name;
private int age;

public Student() {
number = 0;
name = null;
age = 0;
}

public Student(int number, String name, int age) {
this.number = number;
this.name = name;
this.age = age;
}

public int getNumber() {
return number;
}

public void setNumber(int number) {
this.number = number;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public int hashCode() {
return number;
}

public boolean equals(Object obj) {
if (obj instanceof Student) {
Student one = (Student) obj;
if (one.getNumber() == getNumber()
&& one.getName().equals(getName())
&& one.getAge() == getAge()) {
return true;
}
}
return false;
}

public static void main(String[] args) {
Student student = new Student(101, "Tom", 20);

// 普通测试 name 不为 Jack 的方法
if (!(student.getName() != null && student.getName().equals("Jack"))) {
System.out.println("普通测试:student 对象 name 值不为 Jack");
}

// JUnit 测试 name 不为 Jack 的方法
Assert.assertEquals("JUnit 测试:student 对象 name 值不为 Jack", "Jack",
student.getName());
}
}

class TestObject {
public static void main(String[] args) {
Student one = new Student(101, "Jack", 20);
Student another = new Student(101, "Tom", 20);

// 普通测试两个对象是否 equals 方法
if (!one.equals(another)) {
System.out.println("普通测试:one not equals another");
}

// JUnit 测试两个对象是否 equals 方法
Assert.assertEquals("JUnit 测试:one not equals another", one, another);
// 或者
Assert.assertTrue(one.equals(another));
}
}


[b]测试案例(TestCase)[/b]
import junit.framework.TestCase;

public class TestCaseTest extends TestCase {
public TestCaseTest(String name) {
super(name);
}

public void testGetMethod() {
Student student = new Student(101, "Jack", 20);
assertEquals(101, student.getNumber());
assertEquals("Tom", student.getName());
assertEquals(20, student.getAge());
}

public void testSetMethod() {
Student student = new Student();
student.setNumber(101);
student.setName("Tom");
student.setAge(20);
assertEquals(101, student.getNumber());
assertEquals("Jack", student.getName());
assertEquals(20, student.getAge());
}
}


import java.util.Enumeration;
import junit.framework.TestCase;
import junit.framework.TestResult;

public class TestCaseMain {
public static void main(String[] args) {
TestCase tc1 = new TestCaseTest("TestGet"){
// 使用匿名类重新定义 runTest() 方法,TestCase 的 run 方法会自动调用 runTest() 方法
protected void runTest() {
testGetMethod();
}
};
showResult(tc1.run());

TestCase tc2 = new TestCaseTest("TestSet"){
protected void runTest() {
testSetMethod();
}
};
showResult(tc2.run());
}

// TestResult 里面保存了一些测试结果,可以手工控制显示这些信息
public static void showResult(TestResult result) {
if (result.errorCount() > 0) {
System.out.println("error: " + result.errorCount());
Enumeration error = result.errors();
while(error.hasMoreElements()) {
System.out.println(error.nextElement());
}
}

if (result.failureCount() > 0) {
System.out.println("failure: " + result.failureCount());
Enumeration failure = result.failures();
while(failure.hasMoreElements()) {
System.out.println(failure.nextElement());
}
}
}
}


[b]测试套件(TestSuite)[/b]

public class TestSuitMain {
public static void main(String[] args) {
// 直接利用 Reflection 机制测试所有的 test 开头的方法

// 文字显示调试工具
junit.textui.TestRunner.run(TestCaseTest.class);

// 图形显示调试工具 - awt
junit.awtui.TestRunner.run(TestCaseTest.class);

// 图形显示调试工具 - swing
junit.swingui.TestRunner.run(TestCaseTest.class);
}
}



[b]测试设备(TestFixture)[/b]

import junit.framework.TestCase;

public class TestFixtureTest extends TestCase {

Student student;

public TestFixtureTest(String name) {
super(name);
}

// 设定测试初始化参数,或者是加载 Spring 配置等操作
public void setUp() throws Exception {
super.setUp();
student = new Student(101, "Jack", 20);
}

// 释放占用资源或者数据库连接等操作
public void tearDown() throws Exception {
super.tearDown();
student = null;
}

public void testGetMethod() {
assertEquals(101, student.getNumber());
assertEquals("Mike", student.getName());
assertEquals(20, student.getAge());
}

}


public class TestFixtureMain {
public static void main(String[] args) {
// 直接调用测试工具测试
junit.textui.TestRunner.run(TestFixtureTest.class);
}
}


[b]failure and error[/b]
failure 是指断言结果为 false,也就是预期应该成功的失败了
error 是意料之外的异常,这种异常通常是没有考虑到的,例如数组下标越界等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值