2013-08-26 98 views
0

對於我的應用程序,我使用Struts2,Spring3和JPA。當我使用junit時,它按預期工作,但唯一的問題是用戶定義的異常測試。Junit4在測試運行時拋出異常

用於調用動作形式測試的代碼是

@RunWith(SpringJUnit4ClassRunner.class)來 @ContextConfiguration(位置= { 「類路徑: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在 org.apache.struts2.StrutsJUnit4TestCase.executeAction(StrutsJUnit4TestCase.java:134) 在 com.junitaction.HelloWorldTest.testGetString2(HelloWorldTest.java:76) 在 有機.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) 在 org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) 在 有機.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SPR ingRepeat.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) at 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> 

我怎麼能叫actionClass從junit4 ......請幫助我提高。 我的jar文件:

ANTLR-2.7.2.jar,ASM-3.3.jar,公地文件上傳-1.3.jar, 公地IO-2.0.1.jar,公共琅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-core-2.3.15.1.jar。

+0

http://stackoverflow.com/questions/5550175/junit-test-expected-annotation-not-working –

+0

如果我使用的代碼意味着我可以測試通過。但對於我的應用程序,我需要配置struts和spring。如果我使用上面的擴展類,我不能讓異常測試通過,但所有其他操作流程都通過了。 – Hariprasath

+0

Struts2的哪個版本?看看你是否可以使用'StrutsSpringJUnit4TestCase'類。 –

回答

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); 
    } 
} 
+0

我認爲嘗試捕捉不是執行User Defined異常的標準方法。在我的代碼中顯示了在Junit4中執行用戶定義的異常的正確方法。 – Hariprasath

+0

對於JUnit4來說,這是正確的,但正如我所提到的,您正在混合使用JUnit3和JUnit4,而且根本無法工作。所以要麼完全切換到JUnit4,要麼使用JUnit3方法(正如我在我的回答中提到的)。 –

+0

+1注意:同樣在實際測試中,可能需要在可能拋出異常的行之後使用'Assert.fail()'。 –