Junit测试Struts 2.x动作

时间:2012-02-14 09:56:47

标签: junit struts2

我有一个简单的Action类,我想进行单元测试:

package com.gam.action.test;
import org.apache.struts2.StrutsTestCase;

public class HelloWorldActionTest extends StrutsTestCase{

    /**
     * Test method for {@link com.gam.action.HelloWorldAction#execute()}.
     */
    public void testExecute() {
        fail("Not yet implemented");
    }

}

我在eclipse中使用JUnit向导创建了这个测试用例。运行测试时出现以下错误:

Class: com.opensymphony.xwork2.spring.SpringObjectFactory
File: SpringObjectFactory.java
Method: getClassInstance
Line: 230 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:230:-1
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:449)
    at org.apache.struts2.util.StrutsTestCaseHelper.initDispatcher(StrutsTestCaseHelper.java:54)
    at org.apache.struts2.StrutsTestCase.initDispatcher(StrutsTestCase.java:196)
    at org.apache.struts2.StrutsTestCase.setUp(StrutsTestCase.java:182)
    at junit.framework.TestCase.runBare(TestCase.java:132)
    at junit.framework.TestResult$1.protect(TestResult.java:110)
    at junit.framework.TestResult.runProtected(TestResult.java:128)
    at junit.framework.TestResult.run(TestResult.java:113)
    at junit.framework.TestCase.run(TestCase.java:124)
    at junit.framework.TestSuite.runTest(TestSuite.java:243)
    at junit.framework.TestSuite.run(TestSuite.java:238)
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.NullPointerException
    at com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.java:230)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyResultType(XmlConfigurationProvider.java:538)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addResultTypes(XmlConfigurationProvider.java:509)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:465)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:278)
    at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:112)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:204)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:390)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:436)
    ... 17 more

问题是我不知道应该提供哪些jar文件。我在我的项目中没有使用spring,但是如果我不提供spring jar文件,我会收到一些错误,当我提供它时,我得到了这个。 简单地运行测试需要什么样的jar文件组合! (正如你所看到的,我已经将我的测试方法降级为虚拟方法。)

1 个答案:

答案 0 :(得分:1)

struts2-junit-plugin引入了自己的依赖项,由Maven输出显示:

[INFO] +- org.apache.struts:struts2-junit-plugin:jar:2.3.1:compile
[INFO] |  +- org.springframework:spring-test:jar:3.0.5.RELEASE:compile
[INFO] |  +- org.springframework:spring-core:jar:3.0.5.RELEASE:compile
[INFO] |  |  +- org.springframework:spring-asm:jar:3.0.5.RELEASE:compile
[INFO] |  |  \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] |  +- org.springframework:spring-context:jar:3.0.5.RELEASE:compile
[INFO] |  |  +- org.springframework:spring-aop:jar:3.0.5.RELEASE:compile
[INFO] |  |  |  \- aopalliance:aopalliance:jar:1.0:compile
[INFO] |  |  +- org.springframework:spring-beans:jar:3.0.5.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-expression:jar:3.0.5.RELEASE:compile
[INFO] |  \- junit:junit:jar:4.8.2:compile

听起来就像你没有使用Maven,这几乎肯定是一个坏主意。自己管理传递依赖关系并不是非常有趣 - 节省一些时间和手工劳动。