如何配置Cactus

Cactus Configuration

1.Client side configuration

The following table lists the properties that can be defined on Cactus client side:

Property Namecactus.contextURL
RequiredYes
DescriptionWebapp Context under which the application to test runs.
Examplecactus.contextURL = http://localhost:8080/test

Property Namecactus.servletRedirectorName
RequiredNo. Defaults to "ServletRedirector".
DescriptionName of the Cactus Servlet Redirector as it is mapped on the server side in web.xml (see below). This property is needed only if your test classes are extending ServletTestCase (see the TestCase Howto tutorial).
Examplecactus.servletRedirectorName = ServletRedirector

Property Namecactus.jspRedirectorName
RequiredNo. Defaults to "JspRedirector".
DescriptionName of the Cactus JSP Redirector as it is mapped on the server side in web.xml (see below). This property is needed only if your test classes are extending JspTestCase (see the TestCase Howto tutorial).
Examplecactus.jspRedirectorName = JspRedirector

Property Namecactus.filterRedirectorName (For J2EE API 1.3 only)
RequiredNo. Defaults to "FilterRedirector".
DescriptionName of the Cactus Filter Redirector as it is mapped on the server side in web.xml (see below). This property is needed only if your test classes are extending FilterTestCase (see the TestCase Howto tutorial).
Examplecactus.filterRedirectorName = FilterRedirector

2.Server side configuration

On Cactus server side, you only need to properly configure your application web.xml file to include definitions

for Cactus Redirectors (see How it works if you don't know what a Cactus Redirector is).

You need to register the Cactus Redirectors that you use, and you need to map them to the

cactus.servletRedirectorName, cactus.jspRedirectorName and cactus.filterRedirectorName

that you have configured on the client side (or simply make sure that you use the default names, i.e.

ServletRedirector, JspRedirector and FilterRedirector respectively).

Here is a sample web.xml that defines the 3 Cactus Redirectors:

 

<? xml version="1.0" encoding="ISO-8859-1" ?>

<! DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"
>

< web-app >

    
< filter >
        
< filter-name > FilterRedirector </ filter-name >
        
< filter-class > org.apache.cactus.server.FilterTestRedirector </ filter-class >
    
</ filter >

    
< filter-mapping >
        
< filter-name > FilterRedirector </ filter-name >
        
< url-pattern > /FilterRedirector </ url-pattern >
    
</ filter-mapping >

    
< servlet >
        
< servlet-name > ServletRedirector </ servlet-name >
        
< servlet-class > org.apache.cactus.server.ServletTestRedirector </ servlet-class >
    
</ servlet >

    
< servlet >
        
< servlet-name > JspRedirector </ servlet-name >
        
< jsp-file > /jspRedirector.jsp </ jsp-file >
    
</ servlet >

    
< servlet-mapping >
        
< servlet-name > ServletRedirector </ servlet-name >
        
< url-pattern > /ServletRedirector </ url-pattern >
    
</ servlet-mapping >

    
< servlet-mapping >
        
< servlet-name > JspRedirector </ servlet-name >
        
< url-pattern > /JspRedirector </ url-pattern >
    
</ servlet-mapping >

</ web-app >

If you are using the JSP Redirector (i.e. you have test classes that extend JspTestCase), you must copy the

jspRedirector.jsp file (found in the sample/web directory where you unpacked your Cactus distribution) in

a directory in your webapp and you need to put its relative path in the mapping defined above (here we have put

it in the webapp root

If you want to provide some initialisation parameters that will be available to the config implicit object available

in your test case, simply use the standard <init-param> tags.

For example, for the Servlet Redirector (same principle applies to all other redirectors):

 

[...]
    
< servlet >
        
< servlet-name > ServletRedirector </ servlet-name >
        
< servlet-class > org.apache.cactus.server.ServletTestRedirector </ servlet-class >
        
< init-param >
          
< param-name > param1 </ param-name >
          
< param-value > value1 used for testing </ param-value >
        
</ init-param >
    
</ servlet >
[...]
 
Within your testXXX() code, you can also call the config.setInitParameter() method ( config being the
 implicit object of type ServletConfig) to simulate initialisation parameters as if they had been defined in your
web.xml.

Last, if you need to unit test code that uses the Servlet Security API, please check the Security Howto.

3.Cactus logging configuration

 

Since Cactus 1.4, we have switched to using the Jakarta Commons Logging framework for Cactus internal

logs (and any log you may wish to output as part of your test).

This allow Cactus to use any underlying logging framework such as: Log4J, LogKit, JDK 1.4 Logging or even a

Simple Logger provided as part of Commons Logging (it outputs to the console).

Cactus is completely agnostic with regards to the logging framework configuration, so you will have to learn

how to configure your favorite logging yourself. However here are some tips to help set up a Cactus logging

configuration.

a.'cactus.logging.config' property

Cactus provides an optional cactus.logging.config configuration property. If set, Cactus will load the

properties file pointed by this property and will set each property as a system property. This allowsw putting all

logging-related properties into a single place, as demonstrated below.

If you're using the Ant <cactus> task, please refer to the documentation for that task to set up Cactus logging.
 
b.Sample logging configuration files
As Cactus is running in 2 JVMs (client side and server side), you'll need to provide 2 logging configuration if you
 wish to enable logging for both sides. Here are some sample configuration files.
Client side configuration sample
Notice that for JDK 1.4 logging and for Log4J logging you have to specify that path to this file as these 2 logging
 systems also use a configuration file to configure themselves. Alternatively you can put configuration data in other files. However, it's convenient to group everything in a single file.
-----------------------------------------------------------------------------
# Logging properties
-----------------------------------------------------------------------------

# Disable logging by 
default  when running the tests. If you wish to use a 
# logging subsystem, uncomment the line below. That will let Commons logging
# decide automatically of a suitable logging system 
for  you. You can also force
# commons
- logging to use a specific logging system. For more info, see
# http:
// jakarta.apache.org/commons/logging

# Disable logging
#org.apache.commons.logging.Log 
=  org.apache.commons.logging.impl.NoOpLog

# Force to use JDK 
1.4  logging
#org.apache.commons.logging.Log 
=  org.apache.commons.logging.impl.Jdk14Logger

# Force to use Log4J logging
#org.apache.commons.logging.Log 
=  org.apache.commons.logging.impl.Log4JLogger

# Force to use Simple logging
#org.apache.commons.logging.Log 
=  org.apache.commons.logging.impl.SimpleLog

----  JDK  1.4  logging properties

# Following properties are useful 
if  you ' re using the JDK 1.4 logging subsystem
# and wish to output logs to a file. Make sure to comment out the NoOpLog line 
# above.
java.util.logging.config.file 
=  @target.dir@ / logging_client.properties
handlers 
=  java.util.logging.FileHandler
java.util.logging.FileHandler.pattern 
=  @target.dir@ / test_client.log
java.util.logging.FileHandler.formatter 
=  java.util.logging.SimpleFormatter

# If you want to provide finer grained logging, restrict the level 
for  the 
# specific 
package  name. 
# For example: 
# org.apache.cactus.server.level 
=  ALL
# org.apache.commons.httpclient.level 
=  ALL
# .level 
=  ALL
org.apache.cactus.level 
=  ALL

----  Log4J logging properties

# Following properties are useful 
if  you ' re using the Log4J logging subsystem
# and wish to output logs to a file. Make sure to comment out the NoOpLog line 
# above.
log4j.configuration 
=  file: / @target.dir@ / logging_client.properties

log4j.appender.cactus 
=  org.apache.log4j.FileAppender
log4j.appender.cactus.File 
=  @target.dir@ / test_client.log
log4j.appender.cactus.Append 
=   false
log4j.appender.cactus.layout 
=  org.apache.log4j.PatternLayout
log4j.appender.cactus.layout.ConversionPattern 
=   % d {ABSOLUTE}  [ % t]  %- 5p  %- 30 .30c {2}   % -   % % n

# Any application log which uses Log4J will be logged to the Cactus log file
log4j.rootCategory
= DEBUG, cactus

# Debug logs 
for  Cactus
log4j.category.org.apache.cactus 
=  DEBUG, cactus
log4j.additivity.org.apache.cactus 
=   false

# Debug logs 
for  HttpClient
log4j.category.org.apache.commons.httpclient 
=  DEBUG, cactus
log4j.additivity.org.apache.commons.httpclient 
=   false
log4j.category.httpclient 
=  WARN, cactus
log4j.additivity.httpclient 
=   false

----  SimpleLog logging properties

org.apache.commons.logging.simplelog.showlogname 
=   true
org.apache.commons.logging.simplelog.log.org.apache.cactus 
=  trace
org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient 
=  trace
 
Server side configuration sample
Notice that for JDK 1.4 logging and for Log4J logging you have to specify that path to this file as these 2 logging
 systems also use a configuration file to configure themselves. Alternatively you can put configuration data in other files. However, it's convenient to group everything in a single file.
 

Tips

JUnit uses a different classloader to load each test of a TestCase class. Thus, Log4j will reinitialise for each

test, which may lead to overwriting the test_client.log file each time (this is because we have set

log4j.appender.cactus.Append to false. You can set it to true if you wish to keep all the logs but the file

size will grow quickly. In addition logs are really only useful when there is a failure and thus not appending is

usually a good choice.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值