您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
使用JUnit进行Java代码的单元测试
作者:网络转载 发布时间:[ 2013/12/13 14:17:12 ] 推荐标签:

  接下来我们创建壹?测试类 CalculatorTest.java,代码如下:
package net.oschina.bairrfhoinn.test;
import static org.junit.Assert.*;
import org.junit.Test;
import net.oschina.bairrfhoinn.main.Calculator;
public class CalculatorTest {
private static Calculator calculator = new Calculator();
@Test
public void testAdd(){
calculator.add(7);
calculator.add(8);
assertEquals(15, calculator.getReuslt());
}
}
  首先,我们要在方法的前面使用@Test标注,以表明这是壹?测试方法。对于方法的声明也有如下要求:名字可以随便取,没有任何限制,但是返回值必须为void,而且不能有任何参数。如果违反这些规定,会在运行时抛出壹?异常。至于方法内该写些什么,那要看你需要测试些什么了。比如上述代码中,我们想测试壹下add()方法的功能是否正确,在测试方法中调用几次add函数,初始值为0,先加7,再加8,我们期待的结果应该是15。如果终实际结果也是15,则说明add()方法是正确的,反之说明它是错的。assertEquals(15, calculator.getResult());是用来判断期待结果和实际结果是否相等,其中第壹?参数填写期待结果,第二?参数填写实际结果,也是通过计算得到的结果。这样写好之后,JUnit 会自动进行测试并把测试结果反馈给用户。
  如果想运行它,可以在 eclipse 的资源管理器中选择该类文件,然后点击右键,选择 Run As->JUnit Test 即可看到运行结果如下图所示:

  使用@Test 的属性 Ignore 指定测试时跳过这?方法
  如果你在写程序前做了很好的规划,那么哪些方法是什么功能都应该实现并且确定下来。因此,即使该方法尚未完成,他的具体功能也是确定的,这也意味着你可以为他编写测试用例。但是,如果你已经把该方法的测试用例写完,但该方法尚未完成,那么测试的时候无疑是“失败”。这种失败和真正的失败是有区别的,因此 JUnit 提供了壹种方法来区别他们,那是在这种测试函数的前面加上 @Ignore 标注,这个标注的含义是“某些方法尚未完成,暂不参与此次测试”。这样的话测试结果会提示你有几?测试被忽略,而不是失败。壹旦你完成了相应函数,只需要把@Ignore标注删去,可以进行正常的测试。
  比如说上面的测试类 Calculator.java 中,假设我们的 Calculator 类的 multiply() 方法没有实现,我们可以在测试类 CalculatorTest 中先写如下测试代码:
package net.oschina.bairrfhoinn.test;
import static org.junit.Assert.*;
import org.junit.Ignore;
import org.junit.Test;
import net.oschina.bairrfhoinn.main.Calculator;
public class CalculatorTest {
private static Calculator calculator = new Calculator();
... //此处代码省略
@Ignore("method square() not implemented, please test this later...")
@Test
public void testSquare(){
calculator.square(3);
assertEquals(9, calculator.getReuslt());
}
}
  我们再运行壹次测试,会看到如下结果,从图中可以很明显的看出,方法testSquare() 上的 @Ignore 注解已经生效了,运行时直接跳过了它,而方法testAdd()仍然正常的运行并通过了测试。

  使用注解 @Before 和 @After 来完成前置工作和后置工作
  前置工作通常是指我们的测试方法在运行之前需要做的壹些准备工作,如数据库的连接、文件的加载、输入数据的准备等需要在运行测试方法之前做的事情,都属于前置工作;类似的,后置工作则是指测试方法在运行之后的壹些要做的事情,如释放数据库连接、输入输出流的关闭等;比如我们上面的测试,由于只声明了壹? Calculator 对象,他的初始值是0,但是测试完加法操作后,他的值不是0了;接下来测试减法操作,必然要考虑上次加法操作的结果。这是壹?很糟糕的设计!我们非常希望每壹?测试方法都是独立的,相互之间没有任何耦合度。因此,我们很有必要在执行每壹?测试方法之前,对Calculator对象进行壹?“复原”操作,以消除其他测试造成的影响。因此,“在任何壹?测试方法执行之前必须执行的代码”是壹?前置工作,我们用注解 @Before 来标注它,如下例子所示:
package net.oschina.bairrfhoinn.test;
...
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
public class CalculatorTest {
...//这里省略部分代码
@Before
public void setUp() throws Exception {
calculator.clear();
}
@After
public void tearDown() throws Exception {
System.out.println("will do sth here...");
}
...//这里省略部分代码
}

上一页1234下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd