问题标签 [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.
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
.
如何解决这个问题?为什么我的测试类有问题,但运行服务器时一切正常?
spring - @SpringBootTest 和 @Transactional 导致测试冻结
结合时@SpringBootTest
,@Transactional
我的测试冻结并且永远不会恢复。
我在这里建立了一个问题的演示。
getAgain
由于@Before
. 为了解决这个问题,我通常会@Transactional
在类上方包含一个类,以便在每次测试后自动回滚我的更改。但是,这会导致测试冻结并且永远不会恢复。
知道为什么这两个注释不能很好地结合在一起吗?
java - 具有资源值的 SpringJUnit4ClassRunner 上下文配置
我正在尝试配置 Spring、Junit 和 Hibernate(@Autowire
为我们的测试用例启用注释)。我目前的设置是这样的:
但是,初始化失败
我们在context.xml
文件中定义了各种凭据,这些凭据在运行应用程序时由 tomcat 获取。结构如下
InitialContext
然后使用类获取这些属性。
如何为我们的测试用例配置上述功能?
添加context.xml
文件以ContextConfiguration
给出错误
spring-integration - 单元测试 Spring 集成流 DSL
我正在尝试对一个简单的流程进行单元测试,它正在检查文件是否存在,然后执行一些额外的任务。
集成流
还有另一个集成流程从中挑选消息fileNotFoundChannel
并进行额外处理。我不想对这部分进行单元测试。如何停止我的测试而不做进一步的测试并在发布消息后停止fileNotFoundChannel
?
单元测试类
提前致谢
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 侦听器。
任何线索我会怎么做?
java - spring boot test 加载所有配置文件
嗨,我有一个简单的应用程序,我尝试编写一些集成测试。所以我在我的 JUnit 测试中使用 springboot,我需要稍微不同的配置来进行测试开发和生产,所以我使用配置文件。我现在的问题是,如果我将应用程序部署到独立的 tomcat 服务器,配置文件可以正常工作。但是,当使用 springboot 启动 JUnit 测试时,应用程序会尝试加载所有配置文件配置,这会导致冲突
“没有 'org.springframework.context.MessageSource' 类型的合格 bean 可用:预期单个匹配 bean 但找到 2”
正如我已经说过的,这适用于独立的 tomcat。
这是我的代码片段:
这是我的测试课
然后是 SpringBootInitializer
最后是我的 WebAppConfig.class
我希望根据我使用的配置文件仅将一个 messageSource 加载到配置中。由于我始终只使用 1 个配置文件,因此应用程序不应加载重复的 bean,但它确实如此。
为什么会这样?我找不到关于这个问题的任何线索......
spring - 为 Spring 控制器测试配置自定义 Json 序列化器
我正在测试一个控制器:
使用 @WebMvcTest 注释:
但是当我启动我的测试时,Spring 尝试序列化 List> 类型的对象,但它失败了:
当我在调试模式下执行时,我发现异常是从以下位置引发的:com.fasterxml.jackson.databind.ser.std.CollectionSerializer#serializeContents 这是一个 JsonMappingException:
我还尝试将 ObjectMapper 注入到我的上下文中,但它没有被使用。Serilaization 过程中使用了另一个 ObjectMapper。这是我在测试类中使用 @Import(HateoasConfiguration.class) 注入的 ObjectMapper:
spring-test - MockMvc 测试 POST 请求
我的 REST 控制器中有以下发布路线:
该路由使用服务将请求正文中传递的电影添加到数据存储中。服务方法的签名是这样的:
我已经为它编写了以下测试和辅助方法:
我收到以下错误:
除了保存和更新,我需要将电影 JSON 作为请求正文传递,其他路由正在通过测试。请分享您的宝贵意见。
提前致谢。
spring-boot - 如何在@DataJpaTest 中使用用户定义的数据库代理
我们需要跟踪数据库指标,因此我们使用 datasource-proxy 来跟踪它以将其集成到我们创建的自定义数据源中,如下所示
当我们运行主应用程序时,datasource-proxy 被拾取,但是当我们使用 @DataJpaTest 时它没有被拾取。如何在 JUNIT 测试用例中启用数据源代理?
编辑::
使用 SpringBeanPostProcessor
配置代理数据源
aws-sdk - 将 aws-java-sdk 添加到项目时,TestRestTemplate.postForEntity 会更改行为
我在我的 springboot (v1.4.0.RELEASE) 项目中使用 OAuth 授权进行了以下测试。
在我添加 aws-java-sdk 之前,测试工作正常,在这种情况下,调用返回 401 未经授权,而不是抛出 ResourceAccessException。