在典型的组合模版的企业应用软件中,单元应该专门提供与数据库相关的服务。通常情况下,这样专门的单元会利用定义在 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 对象,因此会在运行时使用这个服务器环境下的数据源。
测试使用服务器资源的组件是有挑战性的,因为这些组件存在于这个服务器环境中。您可以用下面的方法之一在这个单元水平测试这样的组件:
这篇文章描述了最后一种方法。它描述了利用 JUnit 和 Rational Application Developer 平台,如何测试部署在应用软件服务器中的基于数据源的组件。
由于这篇文章目的的原因,我们假设下面的软件已经适当地安装和配置:
要获得更多以上软件的信息,请看参考资料部分。
为了使这篇文章中的概念联系更紧密以及更容易理解,本文使用了下面的样例应用软件,它是利用 DB2 来存储和检索它的数据的。
假设这个应用软件鉴定了一个特定的用户名和密码。同时还假设已经下载了一个用户名和密码的清单到这个数据库中,并且当用户每次试图登陆到这个应用软件时,这个应用软件都会对它进行验证。
现在,在这种情形下,这个鉴定应用软件组件将利用这个用户名和密码输入,在这个数据库中进行验证,然后返回一个适当的关于这个用户鉴定情况的消息。这个鉴定组件从而就可能使用这些组件 (如图1 所示):
当您创建一个应用软件样例后,您还将创建一个包含应用软件样本 JUnit 测试用例的应用软件客户端项目。这个客户端项目将由这个服务器托管,并在这个测试用例也将在这里执行。
下面的部分将具体描述如何测试这个样本组件。
当您创建这个带有鉴定组件和测试应用软件客户端的样本应用软件之前,先要在这个数据库中创建必要的数据库对象,同时还要在 WebSphere 中配置这个数据。
您将创建一个样本数据库以及一个包含用户数据的样本表格。
CONNECT TO SAMPLEDB; CREATE TABLE SAMPLEUSER ( USERNAME VARCHAR (50) NOT NULL, PASSWORD VARCHAR (20) NOT NULL ); CONNECT RESET; |
CONNECT TO SAMPLEDB;
INSERT INTO SAMPLEUSER (USERNAME, PASSWORD) VALUES ('Mohan','mohan'); |
在 WebSphere Application Server 中配置 DB2 的数据源
要用 DB2 在 WebSphere 中为样本数据库配置数据源,请看 WebSphere InfoCenter。
要想获得更多 WebSphere 中关于数据源的信息,请看参考资源。
既然这篇文章 已经大概描述了这些步骤,并且定义了您的样本应用软件,那么您现在需要执行这些任务,从而最终测试这个样本应用软件:
您不需要创建先前所描述的鉴定组件。
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; }
}
|
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;
}
}
|
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();
}
}
|
在先前的版本中,您创建了您的鉴定组件,其中 Authenticator 类中的 isAuthentic() 方法利用了 User 类的一个实例,并且在数据库中验证的这个用户。
鉴定代码现在已经准备好了,因此您将在这个部分中创建这个测试客户端项目。
您已经创建了您的样本应用软件和一个您将用来测试这个样本应用软件的应用客户端项目。
在这个部分中,您将为这个应用客户端项目配置必要的资源,这样它才能包含这个服务器资源。
在这个部分中,我们将为这个样本应用软件添加 JUnit 测试用例。
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));
}
}
|
这个测试类包含两个测试:一个是鉴定一个无效用户,另一个是鉴定一个有效的用户。
package com.ibm.datasource.sample.test;
public class AllTests {
public static void main(String[] av) {
junit.textui.TestRunner.run(UserAuthenticationTest.class);
}
}
|
在先前的部分,您在 Rational Application Developer中创建了样本应用软件和一个测试应用客户端项目。您还在一个测试用例中创建了两个 JUnit 测试,并将这个服务资源添加到这个测试应用客户端项目中。
在这个部分中,您将为运行时配置这个测试应用客户端项目。通常情况下,在这个任务中,您将添加任何 JAR 文件,系统二进制,以及在它运行过程中这个测试应用客户端所需的其它资源。
在接下来的部分,您将真实地运行这个测试。
既然您已经完成了这个测试应用客户端项目的整个配置需求,那么现在您将运行这个客户端项目,从而它就可以运行所有的 JUnit 测试。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14789789/viewspace-442881/ ,如需转载,请注明出处,否则将追究法律责任。