单元测试是发现和解决Bug的重要途径之一。
如何在IDEA(Java的一款IDE)快速做单元测试呢?
1. 在写好的类中,按ctrl+shift+T,会出现以下对话框,选择好要进行测试的类,如ArrayStack。
2. 创建新的测试
3.选择测试框架以及要测试的函数
常用的测试框架为Junit4import org.junit.Assertimport org.junit.Test;
import java.util.Stack;
import java.util.Random; import static org.junit.Assert.*; public class ArrayStackTest { private Stack<Integer> stack; private ArrayStack<Integer> array; public void produce_data() {
Random random = new Random();
int rand_len_push = random.nextInt(Integer.MAX_VALUE); stack = new Stack<>(); array = new ArrayStack<>(rand_len_push); System.out.println(String.format("rand_len is %d", rand_len_push)); for (int i = 0; i < rand_len_push-5; i++) { int rand_num = random.nextInt(Integer.MAX_VALUE); stack.push(rand_num); array.push(rand_num); } for (int i = 0; i < rand_len_push-10; i++) { int rand_num = random.nextInt(Integer.MAX_VALUE); stack.push(rand_num); array.push(rand_num); } } @Test public void getSize() { for (int i = 0; i < 10000; i++) { produce_data(); Assert.assertEquals(stack.size(), array.getSize()); } } @Test public void getCapacity() { for (int i = 0; i < 10000; i++) { produce_data(); Assert.assertEquals(stack.capacity(), array.getCapacity()); } } @Test public void isEmpty() { for (int i = 0; i < 10000; i++) { produce_data(); Assert.assertEquals(stack.empty(), array.isEmpty()); } } @Test public void push() {
Random random = new Random();
for (int i = 0; i < 10000; i++) { produce_data();
int rand_time = random.nextInt(Integer.MAX_VALUE);
for (int j = 0; j < rand_time ; j++) {
int rand_num = random.nextInt(Integer.MAX_VALUE); stack.push(rand_num); array.push(rand_num); } Assert.assertEquals(stack.peek(), array.peek()); } } @Test public void pop() {
Random random = new Random();
for (int i = 0; i < 10000; i++) { produce_data();
int rand_time = random.nextInt(Integer.MAX_VALUE);
for (int j = 0; j < stack.size()-rand_time; j++) {
stack.pop(); array.pop(); } stack.pop(); array.pop(); Assert.assertEquals(stack.peek(), array.peek()); } } }
5.运行
其他函数都通过了单元测试,而getCapacity函数没有通过,这是由于官方库中的容量和实现的栈的容量不一致,这是正确的。