利用 JUnit 和 IBM Rational Application Developer 测试一个基于数据源的应用

在典型的组合模版的企业应用软件中,单元应该专门提供与数据库相关的服务。通常情况下,这样专门的单元会利用定义在 J2EE 应用软件服务器上(例如, IBM®WebSphere®Application Server)的数据源。由于这些单元存在于这个应用软件服务器中,所以对它们进行测试有时会比较复杂。一种常用的测试它们的方法是创建使用基于这个数据源组件的测试应用软件,然后在这个应用软件服务器中部署那个测试软件。在这样的情况下,部署测试软件您可能需要付出相当大的努力。这篇文章描述了一种测试部署在应用软件服务器(比如 WebSphere Application Server V6.0.2), 利用 IBM®Rational®Application Developer V7.0 平台上的 JUnit 。这篇文章中的样本组件是一个简单的基于 Java 的™应用软件,它提供了一个简单的用户鉴定服务。这篇文章的目标客户端主要是对 JUnit 框架已经比较熟悉的开发人员,以及那些已经应用过 Rational Application Developer 知识的人群。

引言

通常情况下,组件化的应用软件往往会使用那些利用服务器中的资源以及在这个服务器环境中运行的组件。例如,一套 Java 类可能会为配置在这个服务器中的一个常见的 RDBMS (关系数据管理系统)而使用数据源。这些 Java 对象,因此会在运行时使用这个服务器环境下的数据源。

测试使用服务器资源的组件是有挑战性的,因为这些组件存在于这个服务器环境中。您可以用下面的方法之一在这个单元水平测试这样的组件:

  • 单元测试这个组件是以本地资源为背景的。例如,支持组件使用配置在这个应用软件服务器中的 RDBMS 数据源,测试这个组件可能包括为一个本地 RDBMS 或者任何其它文件系统对它进行配置。尽管当您只想在不对这个服务器资源有任何依赖的情况下快速测试套件件时,它会对您有帮助,但是它也有一个弊端,因为它不能真实反映这个组件所在的实时环境。
  • 通过在这个测试套件件上方创建一个包装应用软件来对这个组件进行单元测试,并将在这个服务器中随着这个组件来部署这个包装器。然而,这种方法的弊端是,开发一个包装器测试应用软件可能会花费相当大的精力。
  • 通过在与这个组件相同的环境中运行这个测试代码来进行单元测试。例如,在这个服务器自身中运行这个测试代码,并且这个组件将在这里运行。

这篇文章描述了最后一种方法。它描述了利用 JUnit 和 Rational Application Developer 平台,如何测试部署在应用软件服务器中的基于数据源的组件。

必备软件

由于这篇文章目的的原因,我们假设下面的软件已经适当地安装和配置:

  1. WebSphere Application Server V6.0.2 或者更新的版本 (以后 WebSphere 为参考)
  2. IBM®DB2®Enterprise Server V9.0或者更新的版本(以后以 DB2 为参考)
  3. Rational Application Developer V7.0 或者更新的版本
  4. JUnit V3.8.1 或者更新的版本(此后以 JUnit 为参考)

要获得更多以上软件的信息,请看参考资料部分。

应用软件样例

为了使这篇文章中的概念联系更紧密以及更容易理解,本文使用了下面的样例应用软件,它是利用 DB2 来存储和检索它的数据的。

假设这个应用软件鉴定了一个特定的用户名和密码。同时还假设已经下载了一个用户名和密码的清单到这个数据库中,并且当用户每次试图登陆到这个应用软件时,这个应用软件都会对它进行验证。

现在,在这种情形下,这个鉴定应用软件组件将利用这个用户名和密码输入,在这个数据库中进行验证,然后返回一个适当的关于这个用户鉴定情况的消息。这个鉴定组件从而就可能使用这些组件 (如图1 所示):

  • 一个在这个应用软件中选取用户的 User 类
  • 一个将会为这个数据库和应用软件提供通信的 DataSource 类
  • 一个在数据库中真实验证特定用户的 Authenticator 类

图 1. 鉴定组件样例类图表
class diagram with use associations

当您创建一个应用软件样例后,您还将创建一个包含应用软件样本 JUnit 测试用例的应用软件客户端项目。这个客户端项目将由这个服务器托管,并在这个测试用例也将在这里执行。

下面的部分将具体描述如何测试这个样本组件。

准备应用软件

当您创建这个带有鉴定组件和测试应用软件客户端的样本应用软件之前,先要在这个数据库中创建必要的数据库对象,同时还要在 WebSphere 中配置这个数据。

创建必要的数据库对象和数据

您将创建一个样本数据库以及一个包含用户数据的样本表格。

  1. 在 DB2 中创建一个叫做 SAMPLEDB 的样本数据库。
  2. 利用列表 1中显示的命令创建一个叫做 SAMPLEUSER 的样本表格。

列表 1. 创建一个样本表格
				
CONNECT TO SAMPLEDB;
CREATE TABLE SAMPLEUSER (
  USERNAME VARCHAR (50) NOT NULL, 
  PASSWORD VARCHAR (20) NOT NULL
);
CONNECT RESET;

  1. 在这个样本表格中添加列表 2中显示的用户数据。

列表 2. 创建这个样本数据
				
CONNECT TO SAMPLEDB;
INSERT INTO SAMPLEUSER (USERNAME, PASSWORD) VALUES ('Mohan','mohan');

在 WebSphere Application Server 中配置 DB2 的数据源

要用 DB2 在 WebSphere 中为样本数据库配置数据源,请看 WebSphere InfoCenter

要想获得更多 WebSphere 中关于数据源的信息,请看参考资源

测试这个样本应用软件

既然这篇文章 已经大概描述了这些步骤,并且定义了您的样本应用软件,那么您现在需要执行这些任务,从而最终测试这个样本应用软件:

  1. 创建这个样本应用软件
  2. 创建一个测试应用软件客户端项目
  3. 为这个应用客户端项目配置资源
  4. 为这个应用软件创建 JUnit 测试用例
  5. 为这个应用客户端项目创建一个运行时配置

创建这个样本应用软件

您不需要创建先前所描述的鉴定组件。

  1. 打开 Rational Application Developer 并创建一个新的 Java项目叫做 SampleDataSourceApp
  2. SampleDataSourceApp项目的源文件下创建两个包叫做 com.ibm.datasource.samplecom.ibm.datasource.sample.db
  3. 创建类 User.javaSampleDataSource.java,以及 Authenticator.java,如列表 3至列表 5所示。

列表 3. User.java
				
package com.ibm.datasource.sample;
public class User {
  private String userName; 
  private String password; 
  
  public User() {} 
  public User(String name, String pwd) {
    userName = name;
    password = pwd;
  }
  
  public String getUserName() { return userName; }
  public String getPassword() { return password; }
  public void setUserName(String userName) { this.userName = userName; }
  public void setPassword(String password) { this.password = password; }
}
				


列表 4. Authenticator.java
				
package com.ibm.datasource.sample;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import com.ibm.datasource.sample.db.SampleDataSource;

public class Authenticator {
  public static boolean isAuthentic(User user) {
    boolean authentic = false;
    
    try {
      SampleDataSource sampleDataSource = SampleDataSource.getDataSource();	
      Connection connection = sampleDataSource.getConnection();		
      Statement statement = connection.createStatement();		
      String sql = "SELECT count(*) AS count FROM SAMPLEUSER WHERE username='" 
        + user.getUserName() + "' and password='" + user.getPassword() + "'";		
      ResultSet resultSet = statement.executeQuery(sql);	
      
      if(resultSet != null) {
        if(resultSet.next()) {
          int count = resultSet.getInt("count");
          if(count > 0) { authentic = true; }
        }
      }
    } catch(Exception e) { e.printStackTrace(); }
    return authentic;
  }
}
				


列表 5. SampleDataSource.java
				
package com.ibm.datasource.sample.db;

import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class SampleDataSource {
  public static final String resourceRefName="jdbc/SampleDataSource";
  private static SampleDataSource sampleDataSource = null;	
  private DataSource dataSource = null;	
  
  protected SampleDataSource() {}	
  private void setupDataSource() throws SQLException {
    try {
      InitialContext ctx = new InitialContext();
      dataSource = (DataSource)ctx.lookup(resourceRefName);
    } catch(NamingException e) { e.printStackTrace(); }
  }
  
  public static synchronized SampleDataSource getDataSource() throws SQLException {
    if(sampleDataSource == null) {
      try {
        sampleDataSource = new SampleDataSource();
        sampleDataSource.setupDataSource();
      } catch(SQLException e) { e.printStackTrace(); }
    }
    return sampleDataSource;
  }
  
  public Connection getConnection() throws SQLException	{
    return dataSource.getConnection();
  }
}
				

  1. 这个项目看起来应该如图 2所示。

    图 2. SampleDataSourceApp 项目
    SampleDataSourceApp 项目

创建这个应用客户端项目

在先前的版本中,您创建了您的鉴定组件,其中 Authenticator 类中的 isAuthentic() 方法利用了 User 类的一个实例,并且在数据库中验证的这个用户。

鉴定代码现在已经准备好了,因此您将在这个部分中创建这个测试客户端项目。

  1. 进入New > Project > Application client project
  2. 在 Application 客户端模块页面,键入如图 3所示的细节。c

    图 3. 应用软件客户端模块
    应用软件客户端模块

  3. 点击 Next
  4. 在 Project Facets 页面中,保留默认值,如图 4所示。

    图 4. Project 组件
    Project 组件

  5. 点击 Next
  6. 清除 Create a default main class 的选项,如图 5所示。

    图 5. 应用软件客户端模块
    应用软件客户端模块

  7. 点击 Finish

为这个应用软件客户端项目配置资源

您已经创建了您的样本应用软件和一个您将用来测试这个样本应用软件的应用客户端项目。

在这个部分中,您将为这个应用客户端项目配置必要的资源,这样它才能包含这个服务器资源。

  1. 在 Project Explorer 视图中,打开 SampleDataSourceAppTest 项目并双击这个部署描述符。
  2. 打开如图 6所示的参考资料制表。

    图 6. 应用客户端模块
    指定 WebSphere 绑定

  3. 点击 Add
  4. 选择如图 7所示的 Resource reference

    图 7. 添加资源参数
    添加资源参数

  5. 点击 Next
  6. 填写如下的数据(图 8):
    • Name: SampleDataSource
    • Type:javax.sql.DataSource
    • Authentication:Container
    • Sharing scope:Shareable
    • Description: Sample data source

      图 8. 资源参数
      资源参数

  7. 点击 Finish
  8. JAAS login information 板块,选择 Use default method。此外,给这个鉴定别名一个与您在 WebSphere 中的定义这个数据源相同的别名(如图 9所示)。

    图 9. 设置鉴定条目
    设置鉴定条目

  9. 保存这个部署描述符。

为这个应用软件创建 JUnit 测试用例

在这个部分中,我们将为这个样本应用软件添加 JUnit 测试用例。

  1. appClientModule文件下下创建一个 com.ibm.datasource.sample.test 包,如图 10所示。

    图 10. 为 JUnit 测试创建一个包
    为 JUnit 测试创建一个包

  2. 右键点击这个包并选择 New > Other > JUnit Test Case。您将看到如 图 11所示的屏幕。

    图 11. JUnit 测试用例
    JUnit 测试用例

  3. 在图 11中显示的对话框底部,这个向导要求您通过点击 Click here 链接添加这个 JUnit 函数库。点击并添加 JUnit 函数库到这个应用客户端项目中。
  4. 键入 UserAuthenticationTest 作为这个测试用例的 Name
  5. 添加如列表 6所示的代码到这个测试类中。

列表 6. UserAuthenticationTest
				
package com.ibm.datasource.sample.test;

import com.ibm.datasource.sample.Authenticator;
import com.ibm.datasource.sample.User;
import junit.framework.TestCase;

public class UserAuthenticationTest extends TestCase {
  public void testAuthenticUser() {
    User user = new User("Mohan","mohan");
    assertTrue(Authenticator.isAuthentic(user));
  }
  
  public void testNonAuthenticUser() {
	// the password for user "Mohan" is not valid
    User user = new User("Mohan","");		
    assertFalse(Authenticator.isAuthentic(user));	
  }
}
				


这个测试类包含两个测试:一个是鉴定一个无效用户,另一个是鉴定一个有效的用户。

  1. SampleDataSourceAppTest 下创建一个 lib 文件夹,并导出 SampleDataSourceApp 项目作为一个 Java™ archive (JAR) 文件到这个 lib 文件中。
  2. 添加以上的 JAR 文件到这个 SampleDataSourceAppTest 项目的构建路径中。
  3. 构建这个项目。
  4. 现在您将为这些测试创建一个测试套件。右键点击 com.ibm.datasource.sample.test 包并选择 New > Other > JUnit Test Suite。您将看到如图 12所示的对话框。

    图 12. JUnit 测试套件
    JUnit 测试套件

  5. 点击 Finish
  6. 这个应用客户端项目需要一个包含有即将被执行的标准 Java main 方法的强制性的 类。您将添加一个 main 方法到这个 AllTests.java 类中。添加一个 main() 方法到这个 AllTests.java 中,如列表 7所示。

列表 7. AllTests.java
				
package com.ibm.datasource.sample.test;

public class AllTests {
  public static void main(String[] av) {  
    junit.textui.TestRunner.run(UserAuthenticationTest.class);
  }
}
				

  1. 现在,开始配置 AllTests.java 作为这个应用客户端项目的 main类。再次打开这个应用客户端项目的部署描述符。
  2. 在这个 Overview 标签,编辑 Main Class 从而它就可以指向这个 AllTests.java 类,如图 13所示。

    图 13. 配置这个 Main Class
    配置这个 Main Class

  3. 保存这个部署描述符。

为这个应用客户端创建运行时配置

在先前的部分,您在 Rational Application Developer中创建了样本应用软件和一个测试应用客户端项目。您还在一个测试用例中创建了两个 JUnit 测试,并将这个服务资源添加到这个测试应用客户端项目中。

在这个部分中,您将为运行时配置这个测试应用客户端项目。通常情况下,在这个任务中,您将添加任何 JAR 文件,系统二进制,以及在它运行过程中这个测试应用客户端所需的其它资源。

  1. 右键点击这个应用客户端项目并选择 Run As > Run
  2. 自从您创建了这个应用客户端项目,而且将 WebSphere Application Server V6.0 作为目标,选择左边面板的 WebSphere v6.0 App Client,如图 14所示。

    图 14. 新建运行时配置
    新建运行时配置

  3. 点击屏幕左上方的图标,创建一个新的配置。
  4. 为这个配置取一个名称(在这个案例中,SampleDataSource App test) 如图 15所示。

    图 15. 创建、管理,以及运行配置
    创建、管理,以及运行配置

  5. 确保 Enterprise application 以及 Application client module 区域指向正确的值。
  6. 同样,确保 SampleDataSourceApp.jar 包含在这个类路径中,如图 16所示。

    图e 16. 运行时的类路径
    运行时的类路径

  7. 此外,在这个配置路径中添加这个 DB2 驱动器 JARs 。
  8. 点击 Apply,从而保存这个配置的设置。

在接下来的部分,您将真实地运行这个测试。

运行这个 JUnit 测试用例来测试这个样本应用软件

既然您已经完成了这个测试应用客户端项目的整个配置需求,那么现在您将运行这个客户端项目,从而它就可以运行所有的 JUnit 测试。

  1. 通过选择 Rational Application Developer 工作空间中的 Window > Show View > Other > Server > Servers 来打开 Servers 视图。
  2. 右键点击 Servers 视图中的 WebSphere Application Server v6.0 开始执行 WebSphere ,如图 17所示。

    图 17. Servers 视图
    Servers 视图

  3. 现在 WebSphere 已经开始运行,右键点击整个应用客户端项目,并选择 Run As > Run
  4. 选择您在先前部分配置的配置,如图 18所示。

    图 18. 选择运行时配置
    选择运行时配置

  5. 点击Run,从而运行这个 JUnit tests。
  6. 您应该在这个控制台可以看到测试结果,如图 19所示。

    图 19. 控制台中的测试结果
    控制台中的测试结果

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14789789/viewspace-442881/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14789789/viewspace-442881/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值