2016-08-08 4 views
1

私は最初のspring-boot 1.4.0統合テストを書きたいと思っています。しかし、Spring Docsの例は私のためには機能しません。たぶん誰も私を助けることができる:)Spring-Boot 1.4.0ランダムポートの使用例

私は例のテストを実行したい場合は、私は次のエラーを取得:

エラー:

java.lang.IllegalStateException: Failed to load ApplicationContext 
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) 
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83) 
at org.springframework.boot.test.autoconfigure.AutoConfigureReportTestExecutionListener.prepareTestInstance(AutoConfigureReportTestExecutionListener.java:49) 
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:228) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:230) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:249) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) 
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234) 
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

Caused by: java.lang.IllegalArgumentException: Cannot load an ApplicationContext with a NULL 'contextLoader'. 
    Consider annotating your test class with @ContextConfiguration or @ContextHierarchy. 
at org.springframework.util.Assert.notNull(Assert.java:115) 
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:91) 
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) ... 27 more 

私のテストクラス:

import org.junit.*; 
import org.junit.runner.*; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.boot.test.context.*; 
import org.springframework.boot.test.web.client.*; 
import org.springframework.test.context.junit4.*; 

import static org.assertj.core.api.Assertions.*; 

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT) 
public class ControllerTest { 

    @Autowired 
    private TestRestTemplate restTemplate; 


    @Test 
    public void testExample() throws Exception { 
     String body = this.restTemplate.getForObject("/api/label/language/DE", String.class); 
     assertThat(body).isEqualTo("Hello World"); 
    } 
} 

をSpringBootアプリケーション:

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.context.annotation.Import; 

@SpringBootApplication() 
@Import(value = {CassandraDataSource.class}) 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
} 

のpom.xml: http://maven.apache.org/xsd/maven-4.0.0.xsd ">春から 4.0.0

<groupId>com.test</groupId> 
<artifactId>backend</artifactId> 
<version>0.0.1-SNAPSHOT</version> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.4.0.RELEASE</version> 
    <relativePath/> <!-- lookup parent from repository --> 
</parent> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <java.version>1.8</java.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

ドキュメント(40.3.3 )ランダムなポートを使用した作業: http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html

+0

私はあなたのアプリケーションのクラスを指定しなかったため、問題は、あなたのテストで来ると思います。 ** @ SpringApplicationConfiguration( classes = Application.class)**、このアノテーションをテストクラスに追加してみてください。 – duardito

+0

@duardito通常、これは必要ではありません。 @ Merth92 'Application'と' ControllerTest'はどのパッケージにありますか? –

+0

@AndyWilkinson同じパッケージ内にあります。 – Merth92

答えて

2

を一見問題でSpringBootApplicationに:Application.class

の代わりに入れて

SpringApplication.run(CfanApplication.class, args); 

次のとおりです。

SpringApplication.run(Application.class, args); 
+0

申し訳ありませんが、私は名前を削除し、この行を忘れてしまった。 – Merth92

+0

私は間違いを訂正しました。ヒントありがとう! – Merth92

関連する問題