这是待测试的类,有加减乘除等功能
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);
}
}