传智播客——Junit测试

1.Junit的概念
JUnit是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性:
1、用于测试期望结果的断言(Assertion)
2、用于共享共同测试数据的测试工具
3、用于方便的组织和运行测试的测试套件
4、图形和文本的测试运行器
2. Junit的安装
1  获取JUnit的软件包,从Junit(http://www.junit.org/index.htm或http://download.sourceforge.net/junit/)下载最新的软件包.
2  将其在适当的目录下解包(我安装在D:/junit2)。这样在安装目录(也就是你所选择的解包的目录)下你找到一个名为junit.jar的文件。将这个jar文件加入你的CLASSPATH系统变量。(IDE的设置会有所不同,参看你所喜爱的IDE的配置指南)JUnit就安装完了。
3 使用JUnit进行单元测试
在3.8版本的风格下,所有完成测试功能的类要继承TestCase类。所有要测试
的方法都要使用testXXX的命名方式。之后由TestRunner类来运行测试类中的每一个需要测试的方法。TestCase类继承了Assert类,有很多static assertXXX方法。每个方法用于断言不同的情况。
                     JUnit中常用的assert方法
断言方法 描述
assertEquals 断言期望值和测试后的实际值相等
assertTrue/assertFalse 断言测试后实际的boolean值是true/fasle
assertNull/assertNotNull 断言测试后实际的值为null
assertSame/assertNotSame 断言期望值和测试后的实际值是否指向同一个对象
在开发的过程中,建议采用测试先行的开发方式,下面的案例将会介绍这个过程:
步骤:
1、建立接口文件IComputer.java和接口实现类文件Computer.Java
package demo;
public interface IComputer {
public int add(int first,int second);
public int sub(int first,int second);
}
在建立Computer类时,并不真正把IComputer接口中要求的逻辑实现,而是仅仅返回固定值,之后就可以先进行测试了,在真实的项目中,也是先定义接口,之后慢慢实现接口逻辑。
package demo;
public class Computer implements IComputer {
public int add(int first, int second) {
return 0;
}
public int sub(int first, int second) {
return 0;
}
}
2、建立单元测试文件TestCompute.java,在添加测试方法testAdd()完成对Computer类的测试。
package unittest;
import demo.Computer;
import demo.IComputer;
import junit.framework.TestCase;
public class TestIComputer extends TestCase {
protected void setUp() throws Exception {
System.out.println("setUp... ");
}
protected void tearDown() throws Exception {
System.out.println("tearDown... ");
}
public void testAdd(){
System.out.println("testAdd... ");
IComputer ic=new Computer();
assertEquals(0, ic.add(-3,3));
assertEquals(-1, ic.add(2,-3));
assertEquals(5, ic.add(2,3));
}
}
建立单元测试文件要把握几个原则:
!)、测试类要继承junit.framework.TestCase.
2)、测试类中可以添加测试方法,但是测试方法名必须以test开头,如testAdd().一但满足了上述原则,测试类的测试方法就可以在JUnit环境中被自动调用,只要在方法中利用 assertXXX来对测试结果进行判断,就可以完成相应的测试。如果在运行测试方法的过程中出现junit.framework.AssertionFailedError,则该方法没有通过测试,
3、编译文件,运行JUnit框架完成测试。
以文本方式运行:
 E:/junit>java –classpath junit.jar; junit.textui.TestRunner demo.TestIComputer
 
会出现如下的界面,从界面中能看到测试的结果,找出问题的原因。
另外,在几次的测试中,无论测试成功还是失败。控制台上总是出现:
setUP。。。
 testADD。。。。
 teardown。。。。。
这三行输出是在TestIComputer定义的三个方法 setUp(),tearDown()和测试方法testAdd()中定义的。事实上,当JUnit框架开始运行测试用例时,运行顺序为:
setUp()
testXXX()
tearDown()
运行setUp和tearDown()的次数与TestCase中的测试方法数量相同,每运行一个testXXX方法都要在其之前运行setUp(),在其之后运行tearDown().
另外为了测试方便可以采用简化的方法:在TestIComputer类中直接加入下面的方法执行:
public static void main(String args[]){
     //文本形式
         junit.textui.TestRunner.run(TestIComputer.class);
          //图形形式
 junit.swingui.TestRunner.run(TestIComputer.class);
}
图形化的方式执行情况
  
在运行TestRunner执行您的测试时,您会发现到有Failure与Error两种测试尚未通过的讯息。
Failure指的是预期的结果与实际运行单元的结果不同所导致,例如当您使用assertEquals()或其它assertXXX()方法断言失败时,就会回报Failure,这时候您要检查您的单元方法中的逻辑设计是否有误。
Error指的是您程序没有考虑到的情况,在断言之前程式就因为某种错误引发例外而终止,例如在单元中存取某个阵列,因为存取超出索引而引发 ArrayIndexOutOfBoundsException,这会使得单元方法无法正确完成,在测试运行到asertXXXX()前就提前结束,这时候您要检查您的单元方法中是否有未考虑到的情况而引发流程突然中断。
JUnit 4 使用 Java 5 中的注解(annotation),以下是JUnit 4 常用的几个 annotation 介绍
@Before:初始化方法
@After:释放资源
@Test:测试方法,在这里可以测试期望异常和超时时间
@Ignore:忽略的测试方法
@BeforeClass:针对所有测试,只执行一次,且必须为static void
@AfterClass:针对所有测试,只执行一次,且必须为static void
一个JUnit 4 的单元测试用例执行顺序为:
@BeforeClass –> @Before –> @Test –> @After –> @AfterClass
每一个测试方法的调用顺序为:
@Before –> @Test –> @After
学习总结:JUnitd 的作用在没有实际涉及到开发式无法显现出威力的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JUnit是一个用于编写和运行测试用例的Java测试框架。它提供了一组注解和断言方法,使得编写和执行单元测试变得更加简单和方便。 JUnit测试用例通常包含以下几个部分: 1. 测试类:一个普通的Java类,用于编写测试方法。 2. 测试方法:使用@Test注解标记的方法,用于测试被测代码的某个功能或行为。 3. 断言方法:用于验证测试结果是否符合预期的方法。 在编写JUnit测试用例时,可以使用以下几个常用的注解: 1. @Test:标记一个方法为测试方法。 2. @Before:在每个测试方法执行之前执行,用于初始化测试环境。 3. @After:在每个测试方法执行之后执行,用于清理测试环境。 4. @BeforeClass:在所有测试方法执行之前执行,用于初始化一次性的资源。 5. @AfterClass:在所有测试方法执行之后执行,用于清理一次性的资源。 在测试方法中,可以使用断言方法来验证测试结果是否符合预期。JUnit提供了一系列的断言方法,例如: 1. assertEquals(expected, actual):验证两个值是否相等。 2. assertTrue(condition):验证条件是否为真。 3. assertFalse(condition):验证条件是否为假。 4. assertNull(object):验证对象是否为空。 5. assertNotNull(object):验证对象是否不为空。 除了上述基本的使用方式外,JUnit还支持参数化测试、异常测试测试套件等高级功能,可以根据具体的需求选择使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值