0

アプリケーションに Struts2、Spring3、および JPA を使用しています。junit を使用すると期待どおりに動作しますが、唯一の問題はユーザー定義の例外テストです。

アクション フォーム Test を呼び出すコードは次のとおりです。

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:ApplicationContext.xml"}) public class HelloWorldTest extends 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) at com.junitaction.HelloWorldTest.testGetString2(HelloWorldTest.java:76) at org.springframework.test.context.junit4.statements. RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) at 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.statement.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at 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>

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-core-2.3。 15.1.jar。

4

1 に答える 1

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);
  }
}  
于 2013-08-26T12:43:37.917 に答える