【问题标题】:Mocking Method of the same class that is getting tested正在测试的同一类的模拟方法
【发布时间】:2021-09-17 07:33:06
【问题描述】:

我对 JUnit 测试和 Mockito 框架非常陌生,我有一个用例,我想测试内部调用我需要测试的同一个类的重载方法的方法。我已经为第一种方法编写了单元测试,并且想跳过内部的第二种方法调用。下面是代码sn-p。

需要测试的类 -> EndPointResolver 测试方法-> getArcadiaResources 在第 66 行内部调用重载方法,我需要跳过/模拟。 [1]:https://i.stack.imgur.com/AGa9t.png

测试类 -> EndPointResolverTest 在第 28 行和第 29 行中,我使用真实对象和第二个使用 spy 对象创建了两个实例,第 47 行我正在调用需要跳过/模拟的方法,第 49 行我正在调用实际方法需要测试,但这里两个方法调用都在发生。我想模拟/跳过第 47 行中的第二个重载方法,只调用第 49 行中的方法。 [2]:https://i.stack.imgur.com/iAJjD.png

【问题讨论】:

  • 不要那样做。测试行为,而不是实现 - 测试替身适用于合作者。

标签: spring-boot unit-testing junit mocking


【解决方案1】:

如果您直接在此处提供作为 sn-p 的代码而不是在某处上传屏幕截图,通常会有所帮助。

这不是您问题的直接答案,但是....我想了解您为什么要避免调用真正的重载方法?我的意思是,如果代码在生产环境中执行,那么该方法将被调用。测试不应该确保生产中所需的行为发生吗?

或者该方法是否做了一些需要非常特殊的测试环境的非常特殊的事情(比如调用另一个系统)?如果是这样,我想知道模拟所谓的内容是否会更好。

总之,如果您能分享更多背景信息并解释您这样做的原因,那就太好了。 :)

【讨论】:

  • 您好,这不在生产中,原因是我想对每个方法进行单元测试,所以我想忽略重载方法返回的内容,而第二个重载方法是使用 Web 客户端调用 API。这是代码sn-p。需要测试的类 EndPointResolver @Component public class EndPointResolver {
猜你喜欢
  • 2011-08-13
  • 2014-07-20
  • 1970-01-01
  • 2018-07-17
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多