2

Maven で TestNg を使用して、春テストでプロジェクトをセットアップしようとしています。コードは次のようになります。

@ContextConfiguration(locations={"test-context.xml"})
public class AppTest extends AbstractTestNGSpringContextTests {

    @Test
    public void testApp() {
        assert true;
    }
}

test-context.xml は単純に Bean を定義します。

<bean id="app" class="org.sonatype.mavenbook.simple.App"/>

コマンドラインから mvn test を実行しているときに ApplicationContext のロードに失敗しました。test-context.xml ファイルが見つからないようです。ただし、Eclipse内で正しく実行できます(TestNgプラグインを使用)。

したがって、test-context.xml は src/test/resources/ の下にあります。「mvn test」コマンドが機能するように、pom.xml でこれを指定するにはどうすればよいですか? ありがとう、

アップデート:

返信いただきありがとうございます。コンテキスト ファイルを読み込めませんというエラーは、クラスパスに問題があるにもかかわらず、ファイルを別の場所に移動したことが原因でした。コンテキスト ファイルが Maven の出力から読み込まれているように見えますが、テストは失敗します。

Running TestSuite
May 25, 2010 9:55:13 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [test-context.xml]
May 25, 2010 9:55:13 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.GenericApplicationContext@171bbc9: display name [org.springframework.context.support.GenericApplicationContext@171bbc9]; startup date [Tue May 25 09:55:13 PDT 2010]; root of context hierarchy
May 25, 2010 9:55:13 AM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
INFO: Bean factory for application context [org.springframework.context.support.GenericApplicationContext@171bbc9]: org.springframework.beans.factory.support.DefaultListableBeanFactory@1df8b99
May 25, 2010 9:55:13 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1df8b99: defining beans [app,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor]; root of factory hierarchy
Tests run: 3, Failures: 2, Errors: 0, Skipped: 1, Time elapsed: 0.63 sec <<< FAILURE!

Results :

Failed tests: 
  springTestContextBeforeTestMethod(org.sonatype.mavenbook.simple.AppTest)
  springTestContextAfterTestMethod(org.sonatype.mavenbook.simple.AppTest)

Tests run: 3, Failures: 2, Errors: 0, Skipped: 1

spring-test バージョン 3.0.2.RELEASE を使用すると、エラーは次のようになります。

org.springframework.test.context.testng.AbstractTestNGSpringContextTests.springTestContextPrepareTestInstance() is depending on nonexistent method null

プロジェクトの構造は次のとおりです。

simple
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    `-- test
        |-- java
        `-- resources
            |-- test-context.xml
            `-- testng.xml

testng.xml:

<suite name="Suite" parallel="false">
  <test name="Test">
    <classes>
      <class name="org.sonatype.mavenbook.simple.AppTest"/>
    </classes>
  </test>
</suite>

テストコンテキスト.xml:

 <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
    default-lazy-init="true">
    <bean id="app" class="org.sonatype.mavenbook.simple.App"/>
 </beans>

pom.xml で、testng、spring、および spring-test アーティファクトとプラグインを追加します。

<dependency>
  <groupId>org.testng</groupId>
  <artifactId>testng</artifactId>
  <version>5.1</version>
  <classifier>jdk15</classifier>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring</artifactId>
  <version>2.5.6</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId> 
    <version>2.5.6</version> 
    <scope>test</scope> 
</dependency>

<build>
<finalName>simple</finalName>
<plugins>
  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>1.6</source>
      <target>1.6</target>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>   
      <suiteXmlFiles>
        <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
      </suiteXmlFiles>
    </configuration>
  </plugin>
</plugins>

基本的に、「A Simple Maven Project」Junit を TestNg に置き換えました。うまくいくことを願っています。

アップデート:

問題が発生したと思います (理由はまだわかりません) - AbstractTestNGSpringContextTests または AbstractTransactionalTestNGSpringContextTests を拡張するたびに、テストは次のエラーで失敗します。

Failed tests:
  springTestContextBeforeTestMethod(org.sonatype.mavenbook.simple.AppTest)
  springTestContextAfterTestMethod(org.sonatype.mavenbook.simple.AppTest)

そのため、2 つのメソッドをオーバーライドすると、最終的にエラーはなくなりました。これは正しい方法ではないと思います。春のテストドキュメントから多くの情報が見つかりませんでした。春のテストフレームワークを知っている場合は、これについて少し説明してください。

4

3 に答える 3

2

Spring 2.5.6 でも同じ問題がありました。私はtestng 5.5を使って解決しました。

私が使用していたバージョン (testng 5.1) も同じ動作をしていました。テストは Eclipse 内で正常に実行されますが、コマンド ラインからコンテキストを見つけることができません。

testng を testng 2.5.6 に置き換えると、問題はなくなりました。はSpring 2.5.6でのみ有効です

于 2010-07-17T00:58:15.433 に答える
2

ファイル名の前にクラスパスを追加します。次に、すべてのソース フォルダーのルート フォルダーを検索します。

@ContextConfiguration(locations={"classpath:test-context.xml"})
于 2010-05-25T08:29:30.433 に答える
0

私はあなたのJavaコードを見たことがないので、暗闇でのショット: @BeforeTestではなく@BeforeMethodを使用していますか?

于 2010-05-26T16:24:07.627 に答える