JUnit使用说明

    一写就是两篇,这个是我带新人时写的教程,没准还会有朋友需要,适合刚接触JUnit,想学单元测试的朋友。

 

Junit使用说明

Junit——Java代码进行单元测试的工具,单元测试是对完成的代码,通常以类为单元进行测试,一方面要求代码编写人员所编写的类可以以一个单元存在,能够进行测试,同时也将问题直接定位到类,便于发现问题,即使修正。

单元测试的好处还有很多,推崇者设置标榜TDD,先写单元测试,后编代码。相关这些话题,网络上有很多,不在这里关注。下面具体讲如何在Eclipse中使用单元测试,以一个项目为例(特别指出,单元测试真的很有用,原本为写这篇文档而写的单元测试就测出类的一个函数存在问题J),IDEEclipse 3.1为例,其他版本应该大同小异。

首先,你的workspase里应该至少有一个项目,就是你要测试的项目,当然可以有多个。如图1,新建一个Java Project

 

1

项目名任意取,推荐使用Test,点击下一步后,在Projects选项卡中点击,add按钮,如图2

 

2

将弹出图3所示对话框,选择要被测试的项目进行关联,可以多选。

 

3

点击确定后,建好项目。在项目中新建Junit Test Case,如图4

 

4

在弹出的对话框中,关注class under test里的内容,填写要测试的类,如图5

 

5

接下来的对话框中,如图6,选择要测试的方法,所有开发的方法都要测试。

 

6

这样一个测试类就写好了,省下的工作就是编写测试代码了。以一个Service类为例,每一个测试类都有两个方法setUp tearDown,这两个方法分别会在所有测试方法执行之前执行(setUp)和所有测试方法执行之后执行(tearDown),可以在里面编写一些初始化和销毁的操作。如:

         private InReportService reportService;

        

         protected void setUp() throws Exception

         {

                   ApplicationContext ac =

                            new FileSystemXmlApplicationContext("src/spring-config.xml");

                  

                   reportService = (InReportService)ac.getBean("historyReportService");                 

         }

 

         protected void tearDown() throws Exception

         {

                   reportService = null;

         }

 

下面的代码是测试类中某个方法的例子,是JUnit测试的关键,具体的编写要看进行单元测试人员的经验和能力了,好的测试方法可以尽可能的考虑到所有会出现问题的地方,测试出各种潜在问题。

         public void testGetReport()

         {

                   List orgList = new ArrayList();

                   orgList.add("02201996");

                  

                   try

                   {

                            Report report = reportService.getReport("2020707029",

                                              orgList);

                           

                            Map paramMap = report.getParameter_map();

                           

                            assertEquals(2, paramMap.size());

                           

                            Iterator it = paramMap.keySet().iterator();

                            Parameter param = (Parameter)it.next();

                            assertEquals("机构", param.getParameter_name());

                           

                            param = (Parameter)it.next();

                            assertEquals("币种", param.getParameter_name());

                           

                            it = paramMap.values().iterator();

                            while(it.hasNext())

                            {

                                     List list = (List)it.next();

                                     Iterator itList = list.iterator();

                                     while(itList.hasNext())

                                     {

                                              ParameterContent pc = (ParameterContent)itList.next();

                                               System.out.println(pc.getvalue() + "  " + pc.getName());    

                                     }

                            }

                   }

                   catch(Exception e)

                   {

                            System.out.println(e.toString());

                   }

         }

通常有两种方法,进行测试,上例中都有涉及,一是使用assertXXX方法,如assertEqualsassertNotNullassertNotSame等,这在运行中会给出判断;另一种是输出想测试的内容,直接在运行时查看控制台,程序中下半部分就是这么做的,这样的内容直观,但是否和预期一样要人工检验,无法通过系统判别。

测试方法编写好后,右键选择类文件,Run as选择Junit Test,如图7,即可运行单元测试,IDE会给出结果。

 

7

最后指出一点,单元测试对于代码重构十分有利,当重构代码后,只要单元测试可以通过,对改动的代码,就比较有信心。

项目中service包和util包中的类都要进行单元测试,只要service单元测试通过,就可以认为dao包中的类都是满足要求的,无法涉及的就是action包中的类,因这些方法都需要requestresponse等参数,无法通过单元测试获得,(当然如果以后有机会接触Struts2就会发现这个问题已经得到解决),目前只有在集成测试中对action进行验证。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值