Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Atlassian Bitbucket管道上使用@WebMvcTest进行的Spring启动测试失败_Java_Spring_Spring Boot_Bitbucket Pipelines_Spring Mvc Test - Fatal编程技术网

Java 在Atlassian Bitbucket管道上使用@WebMvcTest进行的Spring启动测试失败

Java 在Atlassian Bitbucket管道上使用@WebMvcTest进行的Spring启动测试失败,java,spring,spring-boot,bitbucket-pipelines,spring-mvc-test,Java,Spring,Spring Boot,Bitbucket Pipelines,Spring Mvc Test,在本地运行一些@WebMvcTest时,我没有问题(Spring Boot 1.5.8,gradle 4.6): 但是,当我上传到Atlassian Bitbucket并在那里运行/gradlew test--stacktrace时,我得到以下结果: java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwa

在本地运行一些
@WebMvcTest
时,我没有问题(Spring Boot 1.5.8,gradle 4.6):

但是,当我上传到Atlassian Bitbucket并在那里运行
/gradlew test--stacktrace
时,我得到以下结果:

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.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
at org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.prepareTestInstance(SpringBootDependencyInjectionTestExecutionListener.java:44)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
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.
现在Bibucket管道使用Docker映像(java:8)。当我在本地切换回
@SpringBoot
@AutoConfigureMockMvc
时,在这两种环境中都会出现相同的错误。两种环境上的数据库设置相同(MongoDB的docker映像相同),所有内容都相同。。。可能是某些端口在使用Docker时未映射?我想我确实创建了Servlet请求

编辑


模拟Docker容器中的Bitbucket管道构建(如建议的),模拟
映射MongoConverter
并移动到
@SpringBootTest
以及
@AutoConfigureMockMvc
就足以让它运行。因此,如果没有容器,仅使用部分模拟上下文的
@WebMvcTest
就足够了,但它将在Docker容器中失败,例如使用Bitbucket时出现的容器。为什么?

结果发现缺少了一些关键bean,因为
@WebMvc
注释不会拾取
@组件
,只需要web堆栈(不包括存储库)所需的内容,但问题是我的安全配置,我想对其进行测试,现在只需导入
@Import
(以及控制器所依赖的一些其他bean):

这里学到的经验是,所有自动配置的测试上下文(
@WebMvc
@DataMongoTest
,等等)都可以加快测试速度(这很好,因为我在bitbucket上花费构建分钟)。但是你需要真正了解需要什么才能让你的应用程序运行。这迫使我只模拟服务来集中精力于控制器,然后为我的应用程序的DAO部分编写更多的测试。我想这是一件好事

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.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
at org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.prepareTestInstance(SpringBootDependencyInjectionTestExecutionListener.java:44)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
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.
@RunWith(SpringRunner.class)
@WebMvcTest(value = VZNFCController.class)
@Import(value = {VZApiSecurityConfiguration.class, 
                 VZJwtTokenUtils.class, VZProperties.class})
public class VZNFCControllerTest {

  @Autowired
  private MockMvc mvc;

  @MockBean
  private VZNFCTagService tagService;

  /* same as the above... I don't mock out the repository any more */

}