web-dev-qa-db-ja.com

Springを使用してJUnitテストを実行できない

私のテストは次のように定義されています:

package com.mytest;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class SpringTestCase { 

    @Test
    public void testSave_success() {
        fail("Not implemented");
    }
}

私の意図は、このテストを実行して失敗することです!

私のテストのスプリング構成ファイルは次の場所にあります:

 /com/mytest/SpringTestCase-context.xml

私の春の構成ファイルの内容は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<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.5.xsd">

</beans>

テストを実行すると、次の例外が発生します。

Java.lang.NoClassDefFoundError: org/springframework/core/AttributeAccessorSupport
    at Java.lang.ClassLoader.defineClass1(Native Method)
    at Java.lang.ClassLoader.defineClass(ClassLoader.Java:634)
    at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:142)
    at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:277)
    at Java.net.URLClassLoader.access$000(URLClassLoader.Java:73)
    at Java.net.URLClassLoader$1.run(URLClassLoader.Java:212)
    at Java.security.AccessController.doPrivileged(Native Method)
    at Java.net.URLClassLoader.findClass(URLClassLoader.Java:205)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:321)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:294)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:266)
    at org.springframework.test.context.TestContextManager.<init>(TestContextManager.Java:117)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.Java:119)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.Java:108)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:57)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:532)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.Java:31)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.Java:24)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:57)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.Java:29)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:57)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.Java:24)
    at org.Apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.Java:51)
    at org.Apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.Java:123)
    at org.Apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.Java:104)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:616)
    at org.Apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.Java:164)
    at org.Apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.Java:110)
    at org.Apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.Java:175)
    at org.Apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.Java:107)
    at org.Apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.Java:68)
Caused by: Java.lang.ClassNotFoundException: org.springframework.core.AttributeAccessorSupport
    at Java.net.URLClassLoader$1.run(URLClassLoader.Java:217)
    at Java.security.AccessController.doPrivileged(Native Method)
    at Java.net.URLClassLoader.findClass(URLClassLoader.Java:205)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:321)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:294)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:266)
    ... 36 more

私は次の春バージョンセットでmavenを使用しています:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>3.1.1.RELEASE</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
    <scope>test</scope>
</dependency>

私はこれについての助けに感謝します。

編集:

誰かがスプリングコアの依存関係を追加することも提案しました。それが違いを生むかどうかは疑問ですが、追加しました。例外は次のとおりです。

Java.lang.NoClassDefFoundError: org/springframework/beans/BeanUtils
    at org.springframework.test.context.ContextLoaderUtils.resolveContextLoader(ContextLoaderUtils.Java:87)
    at org.springframework.test.context.ContextLoaderUtils.buildMergedContextConfiguration(ContextLoaderUtils.Java:298)
    at org.springframework.test.context.TestContext.<init>(TestContext.Java:100)
    at org.springframework.test.context.TestContextManager.<init>(TestContextManager.Java:117)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.Java:119)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.Java:108)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:57)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:532)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.Java:31)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.Java:24)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:57)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.Java:29)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:57)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.Java:24)
    at org.Apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.Java:51)
    at org.Apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.Java:123)
    at org.Apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.Java:104)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:616)
    at org.Apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.Java:164)
    at org.Apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.Java:110)
    at org.Apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.Java:175)
    at org.Apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.Java:107)
    at org.Apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.Java:68)
Caused by: Java.lang.ClassNotFoundException: org.springframework.beans.BeanUtils
    at Java.net.URLClassLoader$1.run(URLClassLoader.Java:217)
    at Java.security.AccessController.doPrivileged(Native Method)
    at Java.net.URLClassLoader.findClass(URLClassLoader.Java:205)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:321)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:294)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:266)
    ... 28 more
15

それはあなたの全体のポンですか?必要がない場合は、spring-testにはオプションの依存関係としてのみ含まれるため、spring-coreを含める必要があります。

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>${project.version}</version>
  <optional>true</optional>
</dependency>

Mavenのコンテキストでのオプションの意味:

このライブラリを使用するために依存関係がオプションであることを示します。ライブラリが他の場所で使用されている場合、依存関係のバージョンは依存関係の計算に考慮されますが、推移的に渡されることはありません。

何をテストするかに応じて、他のSpringライブラリを含める必要がある場合があります。

私はあなたのテストを、次のSpringの依存関係とSpring-testを含めて実行することができました:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>3.1.1.RELEASE</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>3.1.1.RELEASE</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>3.1.1.RELEASE</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>3.1.1.RELEASE</version>
        <scope>test</scope>
    </dependency>
18
alexwen