使用单元测试的好处:方便查找到程序的问题所在之处。
JUnit的好处:无需编写main()方法,即可对程序进行测试
导包:导入Junit相关的jar包。实际测试中并未有下载,直接在Eclipse中设置即可。
右键项目 >> Bulid Path >> Add Libraries...
选择JUnit:
选择合适的JUnit版本,这里我选择的是Junit5,Finally
具体测试:
编写被测试类:
Calculator.java
package test; public class Calculator { public int add(int a, int b) { return a + b; } public int sub(int a, int b) { return a - b; } }
编写测试类:
CalculatorTest.java
package test; import org.junit.Assert; import org.junit.Test; public class CalculatorTest { @Test //此处是必须有的 public void testAdd() { Calculator c = new Calculator(); int result = c.add(1, 2); Assert.assertEquals(result, 3); } @Test //此处是必须有的 public void testSub() { Calculator c = new Calculator(); int result = c.sub(2, 1); Assert.assertEquals(result, 1); } }
于CalculatorTest.java中右键 >> run as >> JUnit Test 运行结果如图:
JUnit的几种类似@Test的注解:
1. @Test:测试方法
a)(expected = XXException.class)如果程序的异常和XXException.class 一样,则测试通过
b)(timeout = 100)如果程序的执行能在100毫秒内完成,则测试通过
2. @Ignore:被忽略的测试方法,加上之后,暂时不运行此段代码
3. @Before:每一个测试方法之前都会运行。
4. @After:每一个测试方法之后都会执行。
5. @BeforeClass:方法必须是静态方法(并非用来测试静态方法的,而是进行测试的具体方法是静态的),所有测试开始之前运行。
6. @AfterClass:方法必须是静态的(同上),所有测试结束之后运行
实例:package test;
import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; public class CalculatorTest { Calculator c = null; @BeforeClass public static void TestBeforeClass() { System.out.println("testBeforeClass()"); } @Before public void testBefore() { System.out.println("testBefore()"); c = new Calculator(); } @Test public void testAdd() { int result = c.add(1, 2); System.out.println("testAdd()"); Assert.assertEquals(result, 3); } @Test public void testSub() { int result = c.sub(2, 1); System.out.println("testSub()"); Assert.assertEquals(result, 1); } @After public void testAfter() { System.out.println("testAfter()"); } @AfterClass public static void testAfterClass() { System.out.println("testAfterClass()"); } }
//输出:
/*
* testBeforeClass()
* testBefore()
* testAdd()
* testAfter()
*
* testBefore()
* testSub()
* testAfter()
* testAfterClass()
*/