1.说来好笑,记得以前单元测试都是在目标类里简单写个main方法。要写的方法多了,结果把整个main方法写得特别长,注释的乱乱的,每当测出问题的时候还觉得自己很聪明,心里美滋滋的。可是,当一个方法需要回头再次测的时候就犯愁了----到底是哪段注释呢!所以,当接触到Junit的时候,就觉得再离不开它了。
2.Junit是就是我们常用的单元测试工具,它采用测试类和目标类分离,各方法单独执行的方式进行灵活测试,并且它还支持我们的断点。更难能可贵的是,断言可以在我们不必分析测试结果的情况下,就可以知道程序的正确与否。 而且在使用上,也非常简单:
1>.目标类照常写,测试类写在Source Folder里。其实为了清楚起见,测试类的包结构最好和目标类的包结构完全相同,一个目标类对应一个测试类,测试类的命名是在目标类名字的基础上,前面加Test;
在测试类里,每个目标方法对应一个测试方法,测试方法的命名是在目标方法的基础上,前面加test。
2>.测试类要继承Junit的TestCase类;测试方法无需返回值,只是在里面完成测试代码即可。
3>.在测试方法里,可以通过目标类实例对目标方法进行调用测试。对于有返回值的情况,我们可以接收返回值,并设置一个期望返回值,使用断言方法(assertEquals)判断两者一否一致。
3..各测试方法可以一起执行,也可以单独执行。如果执行过程中出现异常或者期望值和实际值不一致,则相应的Junit窗口会变红并给出提示信息。否则,就是我们最期望看到的满屏绿灯,各测试方法正常运行。
注意,它用到一个Junit的jar包,我用的是junit-3.8.1.jar。
目标类:UserService.java
public class UserService {
public void insert(String user) {
System.out.println("UserService.insert():" + user);
}
public void delete(String user) {
System.out.println("UserService.delete():" + user);
public void update(String user) {
System.out.println("UserService.update():" + user);
public String query(String user) {
System.out.println("UserService.query():" + user);
return user;
}
测试类:TestUserService.java
public class TestUserService extends TestCase {
public void testInsert(){
UserService us=new UserService();
us.insert("Li Lei");
public void testDelete(){
us.delete("Han Meimei");
public void testUpdate(){
us.update("Jim");
public void testQuery(){
/**接收实际返回值*/
String result=us.query("Tom");
/**设置个期望值*/
String expected="Li Lei";
/**比较实际值和期望值是否一致,本例中显然是不一致的,所以测试时会出错*/
this.assertEquals(expected, result);
本文转自NightWolves 51CTO博客,原文链接:http://blog.51cto.com/yangfei520/308018,如需转载请自行联系原作者