为 SCA 模块创建自动化的单元测试

发表于:2008-5-05 14:32

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

分享:

为 SCA 组件创建测试

        完成准备工作后,现在我们可以开始编写单元测试了。我们首先通过创建一个调用 getDetailsForPostCode() 服务操作的测试,并预期该操作是有效的 PostCode,然后检查响应数据。我们将使用标准的 SCA 和 SDO 编程技术。您会看到,使用这些编程技术十分繁琐,并且编写此类测试相当耗时。不过,在考虑使用其他较简单方法编写这些测试之前,我们需要完成供练习使用的预备操作。

        我们首先创建 JUnit 测试类,将单个测试添加到该类,最后执行该测试。

测试类

        JUnit 版本 3.8 的常见编程模型是创建测试类,它扩展了 JUnit 提供的一个 TestCase 类。在我们的示例中,我们将使用 Cactus 框架在服务器上执行测试,所以必须扩展 Cactus 测试类 org.apache.cactus.ServletTestCase。

  1. 转到 Web 透视图的 Project Explorer 视图,并展开 Dynamic Web Projects => MT_TestMailServiceJUnitWeb => Java Resources => JavaSource

  2. 右键单击 Java Source,并选择 New => Package 以创建适当的包。右键单击该包,并选择 New => Class 以创建类,并输入如下代码:

    package org.djna.mailservice.test;
    
    import org.apache.cactus.ServletTestCase;
    public class PostCodeTest extends ServletTestCase {
    
    }
    

  3. 然后可以将一个或多个测试方法添加到此类。因为我们已经将类添加到了 Web 应用程序,所以在将模块添加到服务器时,我们的测试类可以在服务器环境中执行。

  4. 测试类表示在开发时发生的测试执行的常见单元,所以我们应仔细考虑任何一个类中包括了多少个测试。如果太少,类的管理会很费力。如果太多,类的执行时间会很长。根据经验,每个类五到十个测试用例比较合适。

测试方法

        JUnit 3.8 命名约定规定所有测试方法名称应以单词 test 开头。这些方法不带任何参数,是空方法。测试失败通过抛出未经检查的异常来指示,通常使用 JUnit 提供的断言和故障方法指示。测试成功通过测试方法的完成来指示。

因而,我们的测试方法类似于:

import java.util.List;

import org.apache.cactus.ServletTestCase;

import com.ibm.websphere.sca.Service;
import com.ibm.websphere.sca.ServiceManager;
import commonj.sdo.DataObject; 
import com.ibm.swservices.sca.test.junit.ScaTestExecutor;

public void testGoodPostCode() {
	Service service = (Service) ServiceManager.INSTANCE
				.locateService("I_PostcodePartner");

	DataObject postCodeDetails
			= (DataObject)service.invoke(
				"getDetailsForPostCode", "BR1 0AB");
		
	assertEquals("Bradford", postCodeDetails.getString("city"));
	assertEquals("Yorkshire", postCodeDetails.getString("county"));
	List addressList = postCodeDetails.getList("addressList");
	assertEquals(2, addressList.size());
	assertEquals("12, Haworth Terrace",
		postCodeDetails.getString("addressList[1]/address"));
	assertEquals("13, Haworth Terrace",
		postCodeDetails.getString("addressList[2]/address"));	
    }

该代码显示:

  • 使用服务管理器,通过合作伙伴引用名称 I_PostcodePartner 访问该服务。
  • 使用邮政编码 BR1 0AB 调用服务操作。
  • 继承由操作返回的数据的断言。请特别注意用于导航 DataObject 的 XPath 表达式。我们使用 addressList[1]/address 之类的表达式来访问地址列表中的个别地址字符串;数组中第一个元素的索引值为 1。

        将此代码粘帖到您的测试类,并保存。有了此代码后,我们就做好了执行测试的准备。

重磅发布,2022软件测试行业现状调查报告~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海漕溪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号