完成准备工作后,现在我们可以开始编写单元测试了。我们首先通过创建一个调用 getDetailsForPostCode() 服务操作的测试,并预期该操作是有效的 PostCode,然后检查响应数据。我们将使用标准的 SCA 和 SDO 编程技术。您会看到,使用这些编程技术十分繁琐,并且编写此类测试相当耗时。不过,在考虑使用其他较简单方法编写这些测试之前,我们需要完成供练习使用的预备操作。
我们首先创建 JUnit 测试类,将单个测试添加到该类,最后执行该测试。
JUnit 版本 3.8 的常见编程模型是创建测试类,它扩展了 JUnit 提供的一个 TestCase 类。在我们的示例中,我们将使用 Cactus 框架在服务器上执行测试,所以必须扩展 Cactus 测试类 org.apache.cactus.ServletTestCase。
-
转到 Web 透视图的 Project Explorer 视图,并展开 Dynamic Web Projects => MT_TestMailServiceJUnitWeb => Java Resources => JavaSource。
-
右键单击 Java Source,并选择 New => Package 以创建适当的包。右键单击该包,并选择 New => Class 以创建类,并输入如下代码:
package org.djna.mailservice.test; import org.apache.cactus.ServletTestCase; public class PostCodeTest extends ServletTestCase { }
-
然后可以将一个或多个测试方法添加到此类。因为我们已经将类添加到了 Web 应用程序,所以在将模块添加到服务器时,我们的测试类可以在服务器环境中执行。
-
测试类表示在开发时发生的测试执行的常见单元,所以我们应仔细考虑任何一个类中包括了多少个测试。如果太少,类的管理会很费力。如果太多,类的执行时间会很长。根据经验,每个类五到十个测试用例比较合适。
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。
将此代码粘帖到您的测试类,并保存。有了此代码后,我们就做好了执行测试的准备。