问题标签 [spring-boot-test]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
781 浏览

java - 执行 JUnit 测试时 ServletContext 无法打开属性文件

我正在使用 JUnit 4 和 MockMvc 测试 REST 控制器。当我几周前编写测试时,一切都按预期工作。我对代码进行了一些修改,但没有更改 JUnit 测试。现在,当我尝试运行测试时,出现错误:

这是我的代码:

我的主要课程:

我的application.properties文件位于src/main/resources. 我没有移动这个文件,我什么也没做,只是在我的服务中添加了一些代码并在我的文件中添加了一些属性。

我阅读了 SO questions & doc,并尝试了以下解决方案:

  • 检查它src/main/resources是否仍在我的测试类路径中
  • @PropertySource("classpath:application.properties")在我的测试中的注释下添加;它没有用,所以我尝试src/test/resources用里面的副本创建一个application.properties,如一篇帖子中所建议的那样
  • 添加@PropertySource("classpath:application.properties")主类而不是测试类
  • 添加@WebAppConfiguration注释
  • 添加@WebMvcTest注释

当然,我没有同时尝试所有这些解决方案,每次失败后我都删除了添加的代码。

我仍然可以毫无问题地运行我的代码,只有测试类导致FileNotFoundException.

如何解决这个问题?为什么我的测试类有问题,但运行服务器时一切正常?

0 投票
1 回答
1141 浏览

spring - @SpringBootTest 和 @Transactional 导致测试冻结

结合时@SpringBootTest@Transactional我的测试冻结并且永远不会恢复。

我在这里建立了一个问题的演示。

getAgain 由于@Before. 为了解决这个问题,我通常会@Transactional在类上方包含一个类,以便在每次测试后自动回滚我的更改。但是,这会导致测试冻结并且永远不会恢复。

知道为什么这两个注释不能很好地结合在一起吗?

0 投票
0 回答
525 浏览

java - 具有资源值的 SpringJUnit4ClassRunner 上下文配置

我正在尝试配置 Spring、Junit 和 Hibernate(@Autowire为我们的测试用例启用注释)。我目前的设置是这样的:

但是,初始化失败

我们在context.xml文件中定义了各种凭据,这些凭据在运行应用程序时由 tomcat 获取。结构如下

InitialContext然后使用类获取这些属性。

如何为我们的测试用例配置上述功能?

添加context.xml文件以ContextConfiguration给出错误

0 投票
1 回答
7021 浏览

spring-integration - 单元测试 Spring 集成流 DSL

我正在尝试对一个简单的流程进行单元测试,它正在检查文件是否存在,然后执行一些额外的任务。

集成流

还有另一个集成流程从中挑选消息fileNotFoundChannel并进行额外处理。我不想对这部分进行单元测试。如何停止我的测试而不做进一步的测试并在发布消息后停止fileNotFoundChannel

单元测试类

提前致谢

0 投票
2 回答
3675 浏览

spring-boot-test - 如何在模块/集成测试中禁用 Spring SQS 处理程序

我有一个 Spring Boot 应用程序,它通过具有 @SqsListener 注释方法的组件“MessageHandler”监听 SQS 队列,并在消息到达时开始一些工作。

还有一个 boot-starter-web 依赖项,因为我们想在生产环境中通过 http 获取健康状态和指标。

现在我想编写一个模块测试,它已经有一个应用程序上下文和自动装配 bean。我还发现了如何禁用测试不需要的 Web 服务器:

但是,MessageHandler bean 也被实例化并尝试连接到 AWS,这是我想阻止的。

一种可行的解决方案是在 src/test/java 中使用@Primary 注释进行测试实现,其handleMessage 方法没有@SqsListener 注释:

但是现在我还想测试(真正的)MessageHandler bean,意思是,我希望 Spring 实例化它并自动装配它的依赖项,但我仍然不希望 @SqsListener 注释变得活跃,所以我可以调用在我的测试中是这样的:

所以我需要关闭 spring-cloud-aws-starter 模块的魔法,该模块为 RealMessageHandler 中的 handleMessage 方法设置 SQS 侦听器。

任何线索我会怎么做?

0 投票
0 回答
544 浏览

java - spring boot test 加载所有配置文件

嗨,我有一个简单的应用程序,我尝试编写一些集成测试。所以我在我的 JUnit 测试中使用 springboot,我需要稍微不同的配置来进行测试开发和生产,所以我使用配置文件。我现在的问题是,如果我将应用程序部署到独立的 tomcat 服务器,配置文件可以正常工作。但是,当使用 springboot 启动 JUnit 测试时,应用程序会尝试加载所有配置文件配置,这会导致冲突

“没有 'org.springframework.context.MessageSource' 类型的合格 bean 可用:预期单个匹配 bean 但找到 2”

正如我已经说过的,这适用于独立的 tomcat。

这是我的代码片段:

这是我的测试课

然后是 SpringBootInitializer

最后是我的 WebAppConfig.class

我希望根据我使用的配置文件仅将一个 messageSource 加载到配置中。由于我始终只使用 1 个配置文件,因此应用程序不应加载重复的 bean,但它确实如此。

为什么会这样?我找不到关于这个问题的任何线索......

0 投票
0 回答
1046 浏览

spring - 为 Spring 控制器测试配置自定义 Json 序列化器

我正在测试一个控制器:

使用 @WebMvcTest 注释:

但是当我启动我的测试时,Spring 尝试序列化 List> 类型的对象,但它失败了:

当我在调试模式下执行时,我发现异常是从以下位置引发的:com.fasterxml.jackson.databind.ser.std.CollectionSerializer#serializeContents 这是一个 JsonMappingException:

我还尝试将 ObjectMapper 注入到我的上下文中,但它没有被使用。Serilaization 过程中使用了另一个 ObjectMapper。这是我在测试类中使用 @Import(HateoasConfiguration.class) 注入的 ObjectMapper:

0 投票
3 回答
14544 浏览

spring-test - MockMvc 测试 POST 请求

我的 REST 控制器中有以下发布路线:

该路由使用服务将请求正文中传递的电影添加到数据存储中。服务方法的签名是这样的:

我已经为它编写了以下测试和辅助方法:

我收到以下错误:

除了保存和更新,我需要将电影 JSON 作为请求正文传递,其他路由正在通过测试。请分享您的宝贵意见。

提前致谢。

0 投票
1 回答
672 浏览

spring-boot - 如何在@DataJpaTest 中使用用户定义的数据库代理

我们需要跟踪数据库指标,因此我们使用 datasource-proxy 来跟踪它以将其集成到我们创建的自定义数据源中,如下所示

当我们运行主应用程序时,datasource-proxy 被拾取,但是当我们使用 @DataJpaTest 时它没有被拾取。如何在 JUNIT 测试用例中启用数据源代理?

编辑::

使用 SpringBeanPostProcessor配置代理数据源

0 投票
0 回答
86 浏览

aws-sdk - 将 aws-java-sdk 添加到项目时,TestRestTemplate.postForEntity 会更改行为

我在我的 springboot (v1.4.0.RELEASE) 项目中使用 OAuth 授权进行了以下测试。

在我添加 aws-java-sdk 之前,测试工作正常,在这种情况下,调用返回 401 未经授权,而不是抛出 ResourceAccessException。