junit3+Spring

为了可以快速编写单元测试,需要单元测试架构的帮助。对于Java代码而言,JUnit是最受欢迎的单元测试架构之一。JUnit在Java开发人员之间被广泛应用,并且得到了所有流行的Java IDE(如Eclipse、IntelliJ和NetBeans)的支持。PIX的所有单元测试都是使用JUnit编写和执行的。

注意:

JUnit存在两个仍在使用的版本,即3.x和4.x。本书使用的是3.x版本,这主要是因为在撰写本书时许多Spring 2测试支持类还处于JUnit 3.x的级别上。

单元测试架构(如JUnit)可以在以下方面提供帮助:

为代码基址创建单元测试

将单元测试组织成测试用例和测试套件

运行单元测试

注意:

在这个"试一试"中,将检验用于测试域模型中的PixUser POJO的单元测试代码。如果想要学习一些JUnit的示例,以及阅读一些文档,那么可以从JUnit的官方网站:http://www.junit.org/上下载JUnit。然而,如果只是想试一试本节中的单元测试,那么不需要下载或安装JUnit。在项目的Maven pom.xml文件中,JUnit 3已经被指定为依赖关系。Maven 2会自动(通过Internet)从中央存储库上下载必需的JUnit JAR。

遵循以下步骤,以检验如何编写PixUser单元测试代码:

(1) 要使用JUnit为PixUser POJO创建一个单元测试用例,首先需要从junit.framework.TestCase中派生一个类,如下面摘取的代码所示:

  
  
  1. import junit.framework.TestCase;  
  2. public class PixUserTest extends TestCase {  
  3. ... 

这段代码可以在下载的源代码的wrox-pix-web/test/java/com/wrox/beginspring/pix目录下的PixUserTest.java文件中找到。

(2) 在每个测试用例中,可以提供一个可选的setUp()方法。这个方法中的代码在测试用例中的每个测试运行以前执行。这是进行局部公用初始化、资源分配和/或为测试用例中的测试编写准备代码的好地方。还可以提供一个可选的tearDown()方法来为每次测试执行资源重新分配或者清理工作。例如,在PixUser中,下面的setUp()方法在一个数组中创建了两个PixUser实例以进行测试。在PixUserTet.java文件列表中继续往下看,可以看到setUp()方法:

  
  
  1. private PixUser [] testUsers;  
  2.  
  3. public void setUp() throws Exception {  
  4. super.setUp();  
  5. testUsers = new PixUser[2];  
  6. testUsers[0] =  
  7. new PixUser("joes""joe""smoe",  
  8. "joes@natat.com""pass1" 
  9. );  
  10.  
  11. testUsers[1] =  
  12. new PixUser("johnm""john""mola",  
  13. "johnm@dist.com""pass2" 
  14. );  

(3) 在使用JUnit 3.x的时候,可以指明架构某个特定的方式是一个测试,方法是将其命名为一个以test开始或结束的公用方法。例如,要测试PixUser POJO的字段,可以创建一个名为testFields的方法,如下面摘取自PixUserTest.java的代码所示:

  
  
  1. public void testFields() {  
  2. PixUser testUser = testUsers[0];  
  3. assert(testUser.getUserName().equals("joes"));  
  4. assert(testUser.getFirstName().equals("joe"));  
  5. assert(testUser.getLastName().equals("smoe"));  
  6. assert(testUser.getEmail().equals("joes@natat.com"));  
  7. assert(testUser.getPassword().equals("pass1"));  
  8. testUser = testUsers[1];  
  9. assert(testUser.getUserName().equals("johnm"));  
  10. assert(testUser.getFirstName().equals("john"));  
  11. assert(testUser.getLastName().equals("mola"));  
  12. assert(testUser.getEmail().equals("johnm@dist.com"));  
  13. assert(testUser.getPassword().equals("pass2"));  

工作原理

通过从JUnit的TestCase类继承,PixUserTest获得了创建单元测试所需的全部支持。在运行单元测试的时候,测试运行器会寻找setUp()方法,并在运行测试用例以前执行它。在这里,PixUserTest的setUp()方法准备了两个PixUser的实例,每个实例中都有一些字段具有特殊的值(比如userName、firstName、lastName)。

在单元测试方法testFields()中,每个实例都被测试以保证POJO包含的字段值与setUP()方法中设置的值相同。测试这些值的首选方法是使用Java的assert()语句:从testFields()方法中可以看到这一点。任何不匹配的字段都会造成一个断言错误被抛出,而实例则不能通过单元测试。只有所有的字段都包含预期的值时单元测试才会通过。

运行测试用例

JUnit带有一个测试运行器实用程序。这个测试运行器通过寻找以test开始或结束的公用方法来确定将要在测试用例中运行的测试。这里testFields()方法被确定为一个测试。多数IDE和构建架构都带有自己的测试运行器;它们使用与JUnit测试运行器相同的约定确定将要运行的测试。下一个"试一试"会说明如何使用JUnit的测试运行器运行单元测试。

注意单元测试用例中大量使用了assert()。这些assert()的实例负责检查单元测试中期望的正确行为。在运行单元测试时要记住(使用-ea Java VM参数)启用assert()。如果单元测试成功,那么它将会悄悄地完成。否则将抛出AssertionError,测试运行器会捕获这个错误、报告失败、并且停止运行。如果任何其他的异常在执行期间被传递到顶层,那么测试运行器也会停止运行并报错。

这是最后一个"试一试",将会在其中使用JUnit测试运行器运行PixUserTest单元测试。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值