5

Eureka を使用する Spring Boot アプリケーションで統合テストを作成する方法を見つけようとしています。テストがあると言う

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {Application.class})
public class MyIntegrationTest {
  @Autowired
  protected WebApplicationContext webAppContext;

  protected MockMvc mockMvc;
  @Autowired
  RestTemplate restTemplate;

  @Before
  public void setup() {
    this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build();
  }

  @Test
  public void testServicesEdgeCases() throws Exception {

    // test no registered services
    this.mockMvc.perform(get("/api/v1/services").accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON))
        .andDo(print())
        .andExpect(status().isOk())
        .andExpect(jsonPath("$").value(jsonArrayWithSize(0)));

    }
}

そして、そのAPI呼び出しのコードパスに次のものがあります:

DiscoveryManager.getInstance().getDiscoveryClient().getApplications();

これは NPE になります。discoveryClient は null として返されます。Spring ブート アプリを直接起動し、自分で API を使用すると、コードは正常に動作します。どこにも特定のプロファイルの使用法はありません。検出クライアントをテスト用に構築するために構成する必要がある、Eureka に関して特別な何かがありますか?

4

1 に答える 1

6

コメントで回答してくれた @Donovan に感謝します。パッケージには Phillip Web と Dave Syer によって作成されたorg.springframework.boot.test、私が知らなかった注釈があります。変更されたコードで回答を提供したかった。クラスの注釈を次のように変更します。

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {Application.class})
@IntegrationTest

または、Spring Boot 1.2.1 以降を使用している場合

@WebIntegrationTest
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {Application.class})
于 2015-05-21T15:06:59.477 に答える