首页 > 代码库 > JUnit单元测试--小试牛刀

JUnit单元测试--小试牛刀

单元测试更多的是在开发阶段完成,开发人员每写一个函数的时候都会写相应的单元测试。对于java代码,普遍使用的是jUnit,根据jUnit可以自己相应的开发一套自动化测试框架。这个的前提是要学会junit,先知道怎么用,才能知道怎么为我所用。

学习JUnit的操作很简单,JUnit是一个敏捷编程的开发框架,他的设计很值得学习。这也是我学习JUnit的原因。

 

JUnit最大的特点就是:各个方法之间是独立的,一个方法的失败不会影响另一个方法的执行。

 

为了更好地理解junit测试用例,我找了一个简单的例子来练习:

例如有这么一个类Greeting,根据每天不同的时间来返回不同的问候语:

package com.test.one; public class Greeting {    public static final String GREETING_MORNING = "Good Morning Sunshine!";    public static final String GREETING_AFTERNOON = "Just a few more hours before quiting time!";    public static final String GREETING_EVENING = "I am outta here";    public static final int MAX_HOUR_MORNING = 12;    public static final int MAX_HOUR_AFTERNOON = 17;     private java.sql.Timestamp iGreetingTime = null;     public Greeting(){        this(System.currentTimeMillis());    }    public Greeting(long greetingTime) {        super();        iGreetingTime = new java.sql.Timestamp(greetingTime);    }    public String getGreeting(){         if(iGreetingTime.getHours()<MAX_HOUR_MORNING){            return GREETING_MORNING;        }else if (iGreetingTime.getHours()<MAX_HOUR_AFTERNOON) {            return GREETING_AFTERNOON;        }else {            return GREETING_EVENING;        }     } }

  

我们需要测试这个类,看是否可以根据时间的不同,来呈现不同的问候语。创建junit的测试用例需要遵循一下几点:

1、Junit类需继承TestCase

2、setUp()和setDown()为每个方法准备或销毁测试装备

3、创建public的方法,方法名为test开头,如testMorningGreeting(),使用assert判断实际返回的值和期望值

4、super(testMethod)为每个测试方法生成实例。首先执行setUp(),然后执行testMethod ,最后执行tearDown()。

package com.test.test; import java.sql.Time; import com.test.one.Greeting; import junit.framework.TestCase; public class GreetingTest extends TestCase {     protected void setUp() throws Exception {        super.setUp();    }     protected void tearDown() throws Exception{        super.tearDown();    }     public void testMorningGreeting() throws Exception {        Time time = new Time(9, 0, 0);        Greeting greeting  = new Greeting(time.getTime());        assertEquals("the morning greeting expected", Greeting.GREETING_MORNING, greeting.getGreeting());    }    public void testAfternoonGreeting() throws Exception {        Time time = new Time(12, 0, 0);        Greeting greeting  = new Greeting(time.getTime());        assertEquals("the Afternoon greeting expected", Greeting.GREETING_AFTERNOON, greeting.getGreeting());    }    public void testEveningGreeting() throws Exception {        Time time = new Time(18, 0, 0);        Greeting greeting  = new Greeting(time.getTime());        assertEquals("the Evening greeting expected", Greeting.GREETING_EVENING, greeting.getGreeting());    }     public GreetingTest(String testMethod){        super(testMethod);    }}

 

这个只是单个测试用例,junit也提供了测试套件组织想要执行的测试用例。

如果你已经有了两个测试用例,AddJobCmdImpTest、RemoveJobCmdImpTest等TestCase的子类别,如果想一次运行这两个测试,需要使用AllTest的类,代表一个测试套件。

public class AllTest {    public static Test suite(){        TestSuite suite = new TestSuite("Test for XXXX");        suite.addTest(new TestSuite(AddJobCmdImpTest.class));        suite.addTest(new TestSuite(RemoveJobCmdImpTest.class));        return suite;    }}

  

JUnit单元测试--小试牛刀