【踩坑记录】单测中@PostConstruct多次执行(postman多次请求)

  本篇文章为你整理了【踩坑记录】单测中@PostConstruct多次执行(postman多次请求)的详细内容,包含有post请求几次 postman多次请求 postman 重复调用接口 post重复提交 【踩坑记录】单测中@PostConstruct多次执行,希望能帮助你了解 【踩坑记录】单测中@PostConstruct多次执行。

  原因:

  @PostConstruct在Spring中常用于在构造函数后初始化对象,执行顺序如下:

  构造方法- 成员变量注入- PostConstruct方法

  单测中由于某些原因,只希望初始化执行一次(当然一般是使用@BeforeClass或者@BeforeAll),不过我这里因为某些不可描述的原因,不希望使用静态方法进行初始化,因此想到了PostConstruct注解,单测执行后发现,初始化执行了多次,就是PostConstruct方法执行了多次。那首先怀疑,是不是所有单测方法运行的时候,都会构造一个单测对象呢?这样每次构造单测类对象后都会执行一次PostConstruct。debug验证了一下发现,跟猜想一样,Junit使用@RunWith(SpringRunner.class)执行时,项目启动时调用了一次构造,但是此时并没有调用PostConstruct方法,PostConstruct方法和Test都是在项目启动后执行的,然后每个单测方法执行都会依次执行 构造- PostConstruct方法- Test方法。

  解决:

  需要保证PostConstruct方法多次执行结果相同,即幂等,比如加个标识符或者判断一个待初始化的值是否已被初始化,另外需要注意,这个待初始化的值需要是static的,保证每次执行PostConstruct方法时拿到的都是同一个变量

  其实写完之后感觉,如果这样用的话,不是跟@Before效果一样了。(补充:后来测了一下确实一样)

  最后还是推荐使用@BeforeClass,如果你用@BeforeClass修饰的方法不是静态的,或者不好改成静态的,多半是代码写的有问题

  

   posted on 2023-02-08 14:15马儿跑

  阅读(36)

  评论(0)

  编辑

  收藏

  举报

  以上就是【踩坑记录】单测中@PostConstruct多次执行(postman多次请求)的详细内容,想要了解更多 【踩坑记录】单测中@PostConstruct多次执行的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: