当编写您想要使用Cactus运行在服务器内部的JUnit测试时,您通常想要扩展ServletTestCase,而非扩展TestCase。另外,您可以让您的suite()方法返回一个ServletTestSuite的实例。当您在您的测试上运行客户端JUnit进程时,它将检测到这是一个服务器端的测试,并发送HTTP请求给您指定的URL。在服务器上,Cactus接收到请求,创建您的测试类的一个实例,然后运行测试。接着,它把结果返回给JUnit客户端进程,该进程显示它们的时候就好像是运行标准的JUnit测试一样。
<servlet>
<servlet-name>ServletRedirector</servlet-name>
<servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class></servlet>
<servlet-mapping>
<servlet-name>ServletRedirector</servlet-name>
<url-pattern>/ServletRedirector</url-pattern>
</servlet-mapping>
此外,服务器和客户端都需要在它们的运行时类路径中包含JUnit、Cactus和测试类。一般说来,您要把Cactus和JUnit JAR添加到您的应用程序的APP-INF/lib目录。您还可以使用Ant任务把运行您的测试所需的所有类都打包成一个EAR文件。启动JUnit客户端进程时,您需要使用-Dcactus.contextURL=SomeURL来指定Cactus在连接到服务器时应该使用的URL。想要了解更多信息,请参见。
Enterprise Java Bean(EJB)
如果您调用EJB的生产代码作为EJB实例运行在同一个虚拟机内部,您可以通过使用Cactus使您的测试环境更加近似地匹配您的生产环境。这正如下面的例子所示。
EJB示例
在这个例子中,上面用于外部组件测试的EJB测试已经被转换成在服务器内部运行。您可以在{UnitTestingWeb}/ejb/CactusEJBTest.java 上找到演示Cactus的EJB测试。它位于一个web项目内,以便可以部署给服务器,尽管将JAR文件构建到APP-INF/lib目录中的Java项目也将被部署给服务器。这次测试的一个代码片断如下所示:
public class CactusEJBTest extends ServletTestCase
{
private SampleSessionHome lookupHome() throws NamingException {
Context ctx = getInitialContext();
// Lookup the bean's home using JNDI
Object home = ctx.lookup("ejb.SampleSessionRemoteHome");
return (SampleSessionHome) narrow(home, SampleSessionHome.class);
}
private Object narrow(Object ref, Class c) {
return PortableRemoteObject.narrow(ref, c);
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-30547-11.html
我也昨天也喝了黑芝麻糊
我红旗系列远中近距离导弹就位
爱炸不炸