这是待测试的类,有加减乘除等功能
package com.sd; //Calculator.java public class Calculator { private static int result; public void add(int n){ result = result + n; } public void substract(int n){ result = result - 1;//故意写错,应为result-n } public void mutiply(int n){ //此方法未写好 } public void divide(int n){ result = result/n; } public void square(int n){ result = n*n; } public void squareRoot(int n){ for(; ;);//死循环 } public void clear(){ result = 0; } public int getResult(){ return result; } }
使用eclipse在项目中构建路径中引入JUnit4的包,然后在项目中新建testcase即可,修改生成的代码完成测试
代码的编写,run即可。
//CalculatorTest.java package com.sd; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; public class CalculatorTest { //为了测试Calculator类,我们必须创建一个calculator对象。 private static Calculator calculator = new Calculator(); //Calculator对象进行一个“复原”操作,以消除其他测试造成的影响。 //因此,“在任何一个测试执行之前必须执行的代码”就是一个Fixture, //我们用@Before来标注它 /* 如果我们使用 @Before 和 @After , 那么每次测试都要读取一次文件,效率及其低下。 这里我们所希望的是在所有测试一开始读一次文件, 所有测试结束之后释放文件,而不是每次测试都读文件。 JUnit 的作者显然也考虑到了这个问题,它给出了 @BeforeClass 和 @AfterClass 两个 Fixture 来帮我们实现这个功能。 从名字上就可以看出,用这两个 Fixture 标注的函数, 只在测试用例初始化时执行 @BeforeClass 方法, 当所有测试执行完毕之后,执行 @AfterClass 进行收尾工 作。在这里要注意一下,每个测试类只能有一个方法被标注为 @BeforeClass 或 @AfterClass ,并且该方法必须是 Public 和 Static 的。 */ @Before public void setUp() throws Exception { calculator.clear(); } @Test public void testAdd() { calculator.add(3); assertEquals(3,calculator.getResult()); } @Test public void testSubstract() { calculator.substract(2); assertEquals(1,calculator.getResult()); } @Test public void testMutiply() { fail("Not yet implemented"); } @Test public void testDivide() { calculator.add(8); calculator.divide(2); assertEquals(4, calculator.getResult()); } @Test(timeout = 1000 ) public void squareRoot() { calculator.squareRoot( 4 ); assertEquals( 2 , calculator.getResult()); } //除 0 异常 /*标注的expected 属性,将我们要检验的 异常传递给他,这样JUnit 框架就能自动帮我们检测是否抛出了我们指定的异常*/ @Test(expected = ArithmeticException.class) public void divideByZero(){ calculator.divide(0); } }