单元测试更多的是在开发阶段完成,开发人员每写一个函数的时候都会写相应的单元测试。对于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;
}
}
原文:http://www.cnblogs.com/silence-hust/p/4116572.html