|
实验4
|
(1)通过动手实际操作,巩固所学的单元测试相关知识;
(2)初步了解JUnit工具的使用方法,加深对单元测试的认识。
(1)学习单元测试基本知识;
(2)熟悉Eclipse工具的基本操作;
(3)掌握基于Eclipse工具的Java编程;
(4)选择一个被测试的Web应用系统,能够正常编译部署(本实验中选择开源Web框架Jeesite)作为单元测试对象。
针对被测试的Web应用系统(本实验中为开源Web框架Jeesite)中的某个类进行单元测试,并使用JaCoCo对测试覆盖率进行分析。
(1)2~3个学生一组;
(2)基础硬件清单:1台Windows操作系统的客户端(进行单元测试);
(3)Jeesite框架:Jeesite网站源码需要转换成Eclipse工程,若需要部署网站还要安装MySQL数据库,可自行拓展,具体可按照源码doc目录中提供的帮助文档进行操作。本次实验直接从网盘的jeesite-master文件目录中下载,在本地安装,重命名为jeesite;
(4)Java环境:在客户端上需要安装Java运行环境和Eclipse。Eclipse安装路径需要记录,如本实验中使用的路径是C:\eclipse-jee-juno-win32\eclipse。具体安装步骤参考附录A。
(1)确定单元测试方案与实施步骤;
(2)下载并安装Tomcat;
(3)下载并安装JUnit工具;
(4)在JUnit单元测试环境下,完成对JaCoCo工具的安装;
(5)使用JUnit对Jeesite网站中的Java类进行单元测试;
(6)使用EclEmma工具,根据单元测试成功与否以及单元测试覆盖率进行分析。
本实验选择Jeesite网站框架源码(关于Jeesite参见附录D)作为Java单元测试的对象,选用Eclipse作为Java开发工具,下载并安装JUnit和JaCoCo工具,使用JUnit进行单元测试,使用JaCoCo进行覆盖率分析来辅助进行单元测试。
在客户端中已安装Java、Eclipse的基础上,可从Apache网站中下载apache-tomcat并解压,本实验中使用的Tomcat版本为7.0.70。使用Eclipse导入Jeesite工程后(单击菜单栏中的File→Import→General→Existing Projects into Workspace,单击Next按钮,通过Browse按钮选择Jeesite工程所在路径D:\jeesite,最后单击Finish按钮导入成功),选中Jeesite工程,单击工具栏中的Window→Preferences,在弹出窗口中选择Server→Runtime Environment,单击Add按钮,在弹出的窗口中选择Apache Tomcat v7.0,单击Next按钮后添加解压的Tomcat路径,如图4-1所示,单击Finish按钮完成Tomcat的配置,安装完成后重启Eclipse。
JUnit是一个开源的Java测试框架,是单元测试框架体系xUnit的一个实例,目前已成为Java单元测试的事实标准。JUnit软件包可以从网站http://www.JUnit.org中下载,实验中使用的版本是JUnit 4.11。
无须解压JUnit压缩包,选中Jeesite工程,在Eclipse菜单Project的子项Properties中选择Java Build Path,单击Libraries标签,单击Add External JARs按钮,选择junit-4.11.jar后单击“打开”按钮,完成JUnit的安装,如图4-2所示,安装完成后重启Eclipse。
JaCoCo是一个开源的覆盖率分析工具,可以帮助大家在单元测试时分析代码覆盖情况。可从网站http://www.eclemma.org/download.html中下载JaCoCo的Eclipse插件EclEmma的最新版本,本实验中使用的版本是Eclemma 2.3.3。
解压eclemma-2.3.3.zip到Eclipse安装路径下的dropins目录中,并且仅保留如图4-3所示的文件和文件夹。打开Eclipse,在工具栏的Help菜单中选择Install New Software,在Install窗口中单击Add按钮,并在Local的弹出框中选择EclEmma所在路径,添加Name,完成后在Install列表中勾选展示的EclEmma程序,单击Next按钮直到安装完成,如图4-4所示。安装完成后重启Eclipse,工具栏中会出现一个Coverage图标,如图4-5所示。
图4-1 Tomcat配置
图4-2 在Eclipse中安装JUnit
图4-3 将EclEmma解压到Eclipse的dropins路径下
图4-4 在Eclipse中安装EclEmma
图4-5 EclEmma安装完成
在配置好JUnit工具后,就可以对Java类进行单元测试,具体步骤如下。
(1)选择被JUnit测试的类。使用Eclipse打开Jeesite工程,选中其中的一个类文件D:\jeesite\src\main\java\com\thinkgem\jeesite\common\utils\StringUtils.java,选择菜单New→Other(或按Ctrl+N键),选择JAVA→JUnit→JUnit Test Case作为单元测试对象,单击Next按钮,如图4-6所示。
(2)在弹出的New JUnit Test Case对话框内输入相关单元测试信息(默认已自动填写),如图4-7所示。
(3)单击Next按钮,选择被测试类的方法,可以选择多个,在实验中选择lowerFirst(String)方法进行测试,该方法的作用是将首字母转换为小写字母,如图4-8所示,单击Finish按钮后,页面会自动显示生成的测试代码。
图4-6 新建JUnit Test Case
图4-7 单元测试类信息填写
图4-8 选择被测类的方法
(4)针对自动生成的代码,根据StringUtils类的lowerFirst(String)方法编写单元测试代码,如图4-9所示,将框内原测试代码末尾的@Test中的所有代码替换为补充的测试代码。
图4-9 StringUtilsTest.java测试代码
补充代码如下:
(5)保存修改后执行单元测试。右击StringUtilsTest.java,执行Run As→JUnit Test命令。按照上述的代码执行后,出现红色的提示条,代表这个测试案例失败,并给出错误的原因和数目,如图4-10所示,失败数为1个,错误代码在第50行,失败的原因是预期结果应该是This is test1,而实际结果是this is test1。双击失败原因的信息,会出现Result Comparison对话框,说明期望值This is test1与实际结果this is test1不符,测试没通过。
(6)修改代码。修改(5)中提示的第50行代码,将预期结果改为this is test1后再次执行单元测试。结果成功,出现绿色的提示条,代表测试对象能正常工作。
Eclipse中已安装EclEmma,在单元测试的基础上进行覆盖率的实验。
图4-10 JUnit Test Case测试失败示例
(1)同样选择已进行过单元测试的StringUtilsTest.java文件,右击该文件后,选择菜单Coverage As→JUnit Test,如图4-11所示。
图4-11 进行单元测试覆盖率检查
(2)查看单元测试执行结果。与单元测试类似,如果预期与实际相符,JUnit标签的界面会出现绿色的提示条,如图4-12所示,若失败则会出现红色提示条,同样也会提示失败原因和代码行。
图4-12 覆盖率测试下的JUnit标签界面
(3)查看覆盖率。打开被测代码StringUtils.java文件,会发现lowerFirst(String)方法整个用绿色标示了,代表此段代码的所有分支全部被覆盖,其他未被覆盖的方法则用红色进行了标示,如图4-13所示。并且,在Coverage标签页面有覆盖率的统计,可以看到图中的StringUtils类文件的覆盖率为11.0%,其方法lowerFirst(String)的覆盖率是100.0%,而其他未进行测试的方法的覆盖率则是0。读者可根据实际情况对剩余方法进行测试。
图4-13 覆盖率统计分析
本实验主要是通过添加补充方法或类的单元测试代码进行单元测试和覆盖率检查,分析单元测试是否正常进行以及被测代码中的条件分支是否被全部覆盖。本实验的重难点在于对JUnit、EclEmma工具的使用,以及对单元测试的正确理解。
(1)本实验中仅对StringUtils.java类中的一个方法lowerFirst(String)进行了单元测试,请尝试对其他方法或其他类进行单元测试。
(2)本实验中使用JUnit进行Java的单元测试,请尝试使用其他单元测试工具对C#或C++做单元测试的练习,如NUnit或CUnit。
(1)'mvn'不是内部或外部命令,原因如下:
①PATH未配置或配置了多个不一致的Maven地址,如用户/系统变量。
②M2_HOME系统/用户变量地址不正确,可删除M2_HOME变量。
③mvn运行不正常,可用cmd执行命令mvn-v来检查。
(2)运行eclipse.bat找不到文件路径或乱码,一般原因是路径中包含空格或中文。
(3)导入到Eclipse下找不到jar包,一般原因是maven未配置,查看m2_repo仓库路径是否正确。
(4)运行init-db.bat提示ORA-xxx,可根据错误码排除错误,一般是数据库url不对或者用户名或密码错误。