测试运行时,Junit4会抛出异常

时间:2013-08-26 06:06:21

标签: jpa struts2 junit4 spring-3

我在我的应用程序中使用Struts2,Spring3和JPA。当我使用junit时,它按预期工作,但唯一的问题是用户定义的异常测试。

调用操作表单Test的代码是

  

@RunWith(SpringJUnit4ClassRunner.class)来   @ContextConfiguration(locations =   {“classpath:ApplicationContext.xml”})公共类HelloWorldTest   扩展StrutsSpringJUnit4TestCase {

public HelloWorldTest() {
}
> @Test
>     public void testGetString2() throws Exception {
>         HelloWorld helloWorld = new HelloWorld();
>         String result = executeAction("/helloworld.action");
>         String s = helloWorld.getString("Test");         
>         assertEquals("Test", this);
>     }

我的 WEB.XML 文件。

> <context-param>
>         <param-name>contextConfigLocation</param-name>
>         <param-value>            
>             /WEB-INF/applicationContext.xml
>         </param-value>
>     </context-param>
>     <filter>
>         <filter-name>struts2</filter-name>
>         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
>     </filter>
>     <listener>
>         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
>     </listener>
>     <filter-mapping>
>         <filter-name>struts2</filter-name>
>         <url-pattern>/*</url-pattern>
>     </filter-mapping>
>     <welcome-file-list>
>         <welcome-file>index.jsp</welcome-file>
>     </welcome-file-list>

和我的applicationContext文件

> <beans>
>         <bean id="helloWorldClass" class="com.junitaction.HelloWorld" > 
>         </bean>
>     </beans>

获得错误。

  

java.lang.NullPointerException at   org.apache.struts2.StrutsJUnit4TestCase.executeAction(StrutsJUnit4TestCase.java:134)     在   com.junitaction.HelloWorldTest.testGetString2(HelloWorldTest.java:76)     在   org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)     在   org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)     在   org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)     在   org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)     在   org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)     在   org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)     在   org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)     在   org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)

Struts.xml 文件

<struts>    
    <!-- Configuration for the default package. -->
    <package name="default" extends="struts-default">
        <action name="helloworld" class="helloWorldClass">
            <result>/success.jsp</result>
        </action>
    </package>
</struts>

如何从junit4调用actionClass ...请帮助我改进。 我的jar文件:

  

antlr-2.7.2.jar,asm-3.3.jar,commons-fileupload-1.3.jar,   commons-io-2.0.1.jar,commons-lang-2.4.jar,commons-lang3-3.1.jar,   commons-logging-1.1.3.jar,freemarker-2.3.19.jar,   javassist-3.11.0.GA.jar,ognl-3.0.6.jar,   org.springframework.web.servlet-3.2.3.RELEASE.jar,   spring-aop-3.2.3.RELEASE.jar,spring-aspects-3.2.3.RELEASE.jar,   spring-beans-3.2.3.RELEASE.jar,spring-context-3.2.3.RELEASE.jar,   spring-context-support-3.2.3.RELEASE.jar,spring-core-3.2.3.RELEASE.jar,   spring-expression-3.2.3.RELEASE.jar,spring-test-3.2.3.RELEASE.jar,   spring-web-3.2.3.RELEASE.jar,struts2-core-2.3.15.1.jar,   struts2-junit-plugin-2.3.15.1.jar,struts2-spring-plugin-2.3.15.1.jar,   XWork的核 - 2.3.15.1.jar。

1 个答案:

答案 0 :(得分:2)

问题是你正在混合JUnit3和JUnit4 ...... StrutsSpringTestCase是一个基于JUnit3的测试用例,其中@Test注释来自JUnit4。将这些薄片混合在一个测试用例中是行不通的。

将整个测试用例切换到基于JUnit4的设置(通过扩展注释中提到的StrutsSpringJUnit4TestCase类)。或者将您的测试方法重写为基于JUnit3的测试(即没有注释和try / catch)。

public void testSomeMethod() throws AccessDeniedException {
  try {
    throw new health.exception.AccessDeniedException("AccessDeniedException");
  } catch (Exception e) {
    Assert.assertTrue(e instanceof health.exception.AccessDeniedException);
  }
}  
相关问题