【问题标题】:How to test a call is made to void method with nothing to assert inside that如何测试对 void 方法的调用,其中没有任何断言
【发布时间】:2014-08-08 20:35:29
【问题描述】:

在下面的代码中,我介绍了 if 语句的两个分支之一。但我也想测试另一个分支,即当this.tom != null

public void setTom(boolean cmsConsent, boolean ebConsent) {
    if(this.tom== null){
        this.tom= new Tom(cmsConsent,ebConsent);
    }
}

如何写assert语句,覆盖所有分支?

【问题讨论】:

  • 正如我所说,我已经测试了那个分支@MarkoTopolnik 所以下次我排除这个分支:)
  • 看看你对该分支的测试是什么样子会很有帮助。

标签: java junit mockito testcase


【解决方案1】:

您的字段“tom”似乎是一个简单的私有字段? 如果它没有被注入,你就不能模拟它是否为空。

我猜你也有那个 tom 对象的 Getter 吗? 如果你想改变你的代码:

if(this.tom== null){

if(this.getTom() == null){

你可以使用 Mockito 的 SPY 功能来模拟 Getter。 (如果你愿意,我可以进一步解释)

PS:PowerMock(ito) 总是可以通过字节操作来增强你的代码,但它应该只在必要时使用 imo。

【讨论】:

  • 它似乎对我有用,但我认为添加依赖项不是一个好习惯,因为我们在测试代码中购买了“this.getTom()”,这将调用 getTom() 所以因此它依赖于另一种方法来运行:|
【解决方案2】:

您是直接从您的测试中调用setTom 吗?如果是这样,您不会断言所有分支都被覆盖,您只需通过您对代码的了解来测试所有分支。拨打setTom 两次,一次拨打tom==null,一次拨打tom != null。覆盖的分支。

【讨论】:

  • 我不认为你所说的方法会起作用,正如你所说,我似乎只是在访问分支以增加我的测试覆盖率,但我没有检查里面的业务代码!
猜你喜欢
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
相关资源
最近更新 更多