当前位置: 首页 > 知识库问答 >
问题:

WebApplicationContext在Spring Boot测试中始终为空

公良俊楚
2023-03-14

我的测试类看起来像这样

@SpringBootTest(webEnvironment=WebEnvironment.MOCK)
public class sampleClassTest{

  @Autowired
  private WebApplicationContext wac;
}

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

}

在设置方法中,wac 始终为空。从spring boot文档中,@SpringBootTest(webEnvironment=WebEnvironment.MOCK)总是创建一个模拟WebapplicaitonContext

所以我希望它会在上面的代码中自动绑定,但这不会发生。

有人可以告诉我在这种情况下如何创建Web应用程序Context,以便它不像我的情况那样为空吗?

我正在运行spring boot测试,从带有springboot注释的类中调用它们。

测试(springboottest)和调用类(springboot)应用程序都位于src/main/java下的同一spring boot项目中。

我在src/main/test下没有任何内容。我这样做是因为如果src/main/java中的类想要调用测试类,那么它就不是真正的测试类。

现在,问题是我不能在springbootTest类中使用runBy(SpringRunner.class)。如果我这样做是为了获得一个mockwebApplication ationContext,它会给我这个错误:

 javax.management.InstanceAlreadyExistsException: org.springframework.boot:type=Admin,name=SpringApplication

我不知道该怎么办。

共有3个答案

凌照
2023-03-14

无论谁遇到这个问题,请确保您的Spring靴入门级父版本与pom中的Spring云版本兼容.xml

我遇到了同样的问题,我通过做同样的事情解决了它。

於乐语
2023-03-14

如果有人在2022年为这个问题而苦苦挣扎 - 请记住我定义的先决条件。如果使用具有测试类的已定义端口和构造函数自动连接@SpringBootTest,则应用程序上下文可能为 null。

似乎构造函数依赖注入很急切,Spring的缓存感知上下文委托正在搜索一个还不可用的web应用程序上下文。如果您使用现场自动连线,您的测试可能会以确定的方式运行。

鲜于浩淼
2023-03-14

要使用< code>@SpringBootTest,您需要使用Spring Framework的测试运行器。用< code > @ run with(spring runner . class)注释您的测试类。

 类似资料:
  • 使用@SpringBootTest,据我所知,Spring实际上是在启动应用程序,并且应该创建映射器类,所以我不明白,为什么映射器总是空?!当我删除@SpringBootTest中的DummyMapper.class时,会出现一个错误,上面写着“Failed to load application Context”。这向我表明,映射器是被识别的。 我觉得奇怪的另一件事是,我必须在映射器中使用“un

  • 有一个@Value注释的常量,在运行测试时不会初始化,当构造函数中需要它时,它会抛出NullPointerException。 要测试的示例类: 示例测试类: 事情尝试了,但没有任何效果: 我已经创建了应用程序。具有所需值的属性文件 创建应用程序测试。属性,并添加了TestPropertySource(locations=“classpath:application test.properties

  • 我已经检查了IntelliJ的调试器,并且可以确认mockMvc本身为空。因此,异常消息告诉我的只是“java.lang.NullPointerException”。 我已经尝试过为测试类添加更通用的Spring Boot注释,比如“@SpringBootTest”或“@RunWith(SpringRunner.class)”,以防与初始化Spring有关,但没有成功。

  • 我在测试类的顶部有以下内容: 通过调试,我可以确认messageSource属性正在被模拟,并且不为null。测试用例最终达到这一点: 我确认我的消息属性文件中包含带有消息字符串的代码“DATA. IS. EMPTY”。我知道消息属性文件配置正确,因为我看到应用程序运行时消息出现在应用程序中。但是,在JUnit测试用例中,上面的getMessage返回为null。查看MessageSource的S

  • 我有一个springboot应用程序,执行器在我的邮件服务器上执行许多请求。 我在github中创建了一个示例来演示这一点。 增加属性eureka.client.registryFetchInterval秒不是一个解决方案,我希望它永远不会在电子邮件或数据库中进行测试(在我的示例中,我没有数据库)

  • 我正在尝试运行一个使用Docker-Compose运行的SpringBoot项目。我使用启动了它的依赖项(Redis、MongoDB和RabbitMQ 我正在构建项目并使用以下命令运行它 我总是犯这些错误: 上处理条件时出错 中的占位符“OAUTH_CLIENTID” 在docker-compose文件中,环境变量的值在environment部分中定义。 这就是application.yml的样子