使用JUnit可以方便地对类的方法进行测试,通过比较方法的返回值与期望值是否相等来判断方法是否正确。
Step1.新建Java工程,添加一个待测试的类Calculator,实现简单的加减乘除。注意,待测试的方法都应该是public。
public class Calculator {
public double add(double a, double b) {
return a + b;
}
public double sub(double a, double b) {
return a - b + 1;//假设程序错误
}
public double multi(double a, double b) {
return a * b;
}
public double div(double a, double b) {
return a / b;
}
}
Step2.在Package Explorer中对Calculator.java右击->New->JUnit Test Case,见下图设置界面。
- 选择Junit4
- Name默认为待测类类名+Test
- 勾选setUp()和tearDown(),分别用于测试前的初始化和善后
- 待测类为右击选中的Calculator
点击Next,见如下界面,勾选需要测试的方法,点击Finish
如果工程未添加JUnit的包,那Eclipse会提示添加:
添加Junit包后可以看到Junit包的位置:
自动生成的测试类CalculatorTest.java如下:
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class CalculatorTest {
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testAdd() {
fail("Not yet implemented");
}
@Test
public void testSub() {
fail("Not yet implemented");
}
@Test
public void testMulti() {
fail("Not yet implemented");
}
@Test
public void testDiv() {
fail("Not yet implemented");
}
}
对测试类CalculatorTest进行完善和解释如下:
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class CalculatorTest {
private Calculator c;//声明
@Before
public void setUp() throws Exception {
// setUp()用于测试前的初始化
c = new Calculator();
}
@After
public void tearDown() throws Exception {
// tearDown()用于测试后的善后
c = null;
}
@Test
public void testAdd() {
// assertEquals()用于断言测试结果
assertEquals(2.0, c.add(1.0, 1.0), 0.0000f);
}
@Test
public void testSub() {
assertEquals(0.0, c.sub(1.0, 1.0), 0.0000f);
}
@Test
public void testMulti() {
assertEquals(1.0, c.multi(1.0, 1.0), 0.0000f);
}
@Test
public void testDiv() {
assertEquals(3.0, c.div(3.0, 1.0), 0.0000f);
}
@Test
public void test5() {
//其他方法
assertTrue(!false);
}
}
- setUp()与tearDown()分别用于测试前的初始化和善后
- JUnit会按顺序执行测试类中标记为@Test的每个方法,方法名不一定要与待测类对应,如上述代码中的Test5()
- assertEquals(expected, actual)方法用于断言实际值与期望值是否一致。当比较double值时使用assertEquals(double expected, double actual, double delta)方法,其中delta是误差,在误差范围内认为double值相等,如上述代码所示。
Step3. Java工程Run as -> Junit Test,可以看到测试结果。
如上图所示,testSub()打叉表示错误,期望值是<0.0>,但实际值是<1.0>,所以应该检查testSub()中的c.sub(1.0, 1.0)方法正确性。
至此,完成JUnit的单元测试。