首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

在Eclipse中施用JUnit

2012-11-08 
在Eclipse中使用JUnit一. 快速入门1. 在工程中引入junit.jar??? 2. 建立test class,继承自junit.framework

在Eclipse中使用JUnit
一. 快速入门

1. 在工程中引入junit.jar

???

2. 建立test class,继承自junit.framework.TestCase

??? 如, 在工程的标题上点击右键,选择New->JUnit Test Case, 输入要创建的测试类名TestClass

?

import junit.framework.TestCase; public class TestClass extends TestCase { ... }

?

3. 在test class中,定义一些以“test”开头的无返回(void)方法

??? 如, 可以使用assertEquals() 等断言方法

import junit.framework.TestCase; public class TestClass extends TestCase { public void testSay(){HelloWorld hi = new HelloWorld();assertEquals("Hello World!", hi.say());}}

?

4. 运行测试, junit.textui.TestRunner.run(testClassName.class);

??? 如, 在main()方法中输入上面的junit.textui.TestRunner.run(TestClass.class); 然后点击Run->Run As->JUnit Test

import junit.framework.TestCase; public class TestClass extends TestCase { public void testSay(){HelloWorld hi = new HelloWorld();assertEquals("Hello World!", hi.say());}public static void main(String[] args) {junit.textui.TestRunner.run(TestClass.class);}} 

?

二. 进阶-使用JUnit 4

1. JUnit最基本的5个点:
??? 1) 由于JUnit4.1是基于JDK1.5开发的,因此它集成了JDK1.5版本的许多特性。其中之一就是一改过去需要扩展TestCase基类以及测试方法必须以“test”开头的约束,而使用annotation标记来标识哪些方法需要测试。每个测试用例类至少有一个方法被“@Test”标记,否则在使用JUnit引擎运行时会抛出一个没有测试方法的异常;


??? 2) 一个测试类就是一个普通的Java类,在形式上没有任何特殊的地方。一般地,我们为了方便区分测试类与源码类,人为地在类名上加上“Test”字样;


??? 3) 构造一些测试对象(new出一些目标测试对象);


??? 4) 执行目标测试对象的目标方法;


??? 5) 调用JUnit提供的验证方法来测试行为的结果,这里调用的是assertEquals方法。这些验证方法是org.junit.Assert类提供的静态方法,所以我们这里使用静态导入功能导入了Assert类。JUnit还提供了很多其他的验证方法(如强制测试失败的fail方法),可以在它的Javadoc文档中找到。

?

2. 典型的annotation

??? 1) @Test标签用来标注待测试的方法,按照类中声明的顺序执行;

????????@Ignore标签告诉Junit4忽略它所标注的方法;

?

??? 2) 预设环境

??????? @BeforeClass标签注释的方法用于在整个类测试过程的初始化后调用一次;

??????? @AfterClass标签注释的方法则是整个测试类结束之前调用一次;

??????? @Before标签注释的方法在每个测试方法执行前调用;

??????? @After标签注释的方法在每个测试方法执行后调用;

?

????3) 限时测试

??????? 如,@Test(timeout=1000)

?

??? 4) 测试套件由下面3个要素组成

??????? i.?? @RunWith: 此注解告诉JUnit使用org.junit.runner.Suite的运行器;

???????????? (测试运行器: 每个类拥有一个运行器,如果没有指定@RunWith,那么你的测试类会使用一个默认的运行器org.junit.internal.runners.TestClassRunner来执行测试)

??????? ii.? @SuiteClasses: 将需要测试的类名加到@SuiteClasses中;

??????? iii.?声明一个空类.

?

????5) 参数化测试 (初学者可以先不看这项)

??????? 把一组组的测试数据集中放在一个集合中,这个集合作为测试类的参数,进行集中测试,避免为每一组测试数据写一个测试方法.

????????

package com.webex.hill.study;import static org.junit.Assert.assertEquals;import java.util.Arrays;import java.util.Collection;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters;@RunWith(Parameterized.class)public class MathParameterizedTest {int faciend;int multiplicator;int result;public MathParameterizedTest(int faciend, int multiplicator, int result) { this.faciend = faciend; this.multiplicator = multiplicator; this.result = result;}@Parameterspublic static Collection multipleValues() { return Arrays.asList(new Object[][] {  {3, 2, 6 },  {4, 3, 12 },  {5, 7, 35 },  {6, 7, 42 },  {11, 7, 77 },  {25, 4, 100 },  {34, 3, 102 },  {21, 5, 105 },  {11, 22, 242 },  {8, 9, 72 }});}@Testpublic void testMultiple() {System.out.println("In testing 3 ...............");assertEquals(result,Math.multiple(faciend,multiplicator));}}

?

???

热点排行