gpt4 book ai didi

java - SpringBoot @interface 总结不同注解

转载 作者:行者123 更新时间:2023-12-01 17:04:07 25 4
gpt4 key购买 nike

我有一个自己的单元测试注释,看起来像

@Retention(RetentionPolicy.RUNTIME)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
@Transactional(rollbackFor = MyException.class)
public @interface DefaultTestAnnotations {
}

我的不同测试类的注释如下

@RunWith(SpringRunner.class)
// @SpringBootTest() <--------------(1)
@DefaultTestAnnotations
public class MyTest1 extends Basic4Tests {

当我单独运行 MyTest1 时,它成功了。如果我在更大的复合体中运行它,它会由于一些奇怪的数据库实体故障而失败。为了简洁起见,我跳过了细节。

当我取消注释 (1) 时,测试(无论是单独测试还是复合测试)都会成功。现在我认为注释@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)已经足够了。但显然不是。

有人有想法吗

  • @interface 声明可以概括什么?从某种意义上说,这些被使用并且是“有意义的”
  • 为什么我需要再次指定@SpringBootTest()?我认为在界面中声明就足够了。

更新:

“某些奇怪的数据库实体失败” - 意味着测试将数据保存到数据库中,并且在检索数据时无法正确恢复枚举。引发的异常表明检索到了一些似乎从未存储过的虚假数据。跟踪具体问题超出了这个问题的范围,因为我找到了一个解决方案 - 我理解。为了避免遇到类似的问题,我希望更清楚地了解如何使用 @interface

最佳答案

我猜您在一次测试中操作了数据库中的数据,因此下一个测试没有您假设的数据。出于性能原因,Spring 在测试之间重用应用程序上下文,并且不会重置它。

解决办法有两种:- 在测试中使用@DirtiesContext注释- 在每次测试之前清理并设置您的数据库

关于java - SpringBoot @interface 总结不同注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61474599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com