複数のスプリングブートテストクラスを作成しました(spring-boot
1.4.)。
FirstActionTest.Java:
@RunWith(SpringRunner.class)
@WebMvcTest(FirstAction.class)
@TestPropertySource("classpath:test-application.properties")
public class FirstActionTest {
@Autowired
private MockMvc mvc;
// ...
}
SecondActionTest.Java:
@RunWith(SpringRunner.class)
@WebMvcTest(SecondAction.class)
@TestPropertySource("classpath:test-application.properties")
public class SecondActionTest {
@Autowired
private MockMvc mvc;
// ...
}
テストを実行する場合:
mvnテスト
それは私が推測する必要はない、各テストクラスのための春のテストコンテキストを作成したようです。
質問は:
_@WebMvcTest
_(つまり@WebMvcTest(FirstAction.class)
および@WebMvcTest(SecondAction.class)
)で2つの異なるクラスを使用することにより、異なるアプリケーションコンテキストが必要であることを具体的に示しています。この場合、各コンテキストに異なるBeanのセットが含まれているため、単一のコンテキストを共有することはできません。コントローラーBeanが適切に動作している場合、コンテキストの作成は比較的速く、問題は発生しません。
キャッシュしてすべてのWebテストで共有できるコンテキストが本当に必要な場合は、コンテキストにまったく同じBean定義が含まれていることを確認する必要があります。思い浮かぶ2つのオプション:
1)コントローラを指定せずに_@WebMvcTest
_を使用します。
FirstActionTest:
_@RunWith(SpringRunner.class)
@WebMvcTest
@TestPropertySource("classpath:test-application.properties")
public class FirstActionTest {
@Autowired
private MockMvc mvc;
// ...
}
_
SecondActionTest:
_@RunWith(SpringRunner.class)
@WebMvcTest
@TestPropertySource("classpath:test-application.properties")
public class SecondActionTest {
@Autowired
private MockMvc mvc;
// ...
}
_
2)_@WebMvcTest
_を使用しないでください。これにより、すべてのBean(Web関連だけでなく)を含むアプリケーションコンテキストが得られます。
FirstActionTest:
_@RunWith(SpringRunner.class)
@SpringBootTest
@TestPropertySource("classpath:test-application.properties")
public class FirstActionTest {
@Autowired
private MockMvc mvc; // use MockMvcBuilders.webAppContextSetup to create mvc
// ...
}
_
SecondActionTest:
_@RunWith(SpringRunner.class)
@SpringBootTest
@TestPropertySource("classpath:test-application.properties")
public class SecondActionTest {
@Autowired
private MockMvc mvc; // use MockMvcBuilders.webAppContextSetup to create mvc
// ...
}
_
キャッシュされたコンテキストを使用すると、複数のテストをより速く実行できるようになりますが、開発時に単一のテストを繰り返し実行している場合は、大量のBeanを作成するコストがかかり、すぐに破棄されます。