用Mockito测试if块



我有一个void函数,它不返回任何带有if块的东西。是否有一种方法,而单元测试来验证是否"如果"块被触摸?

为例来测试下面函数中的"if":

public void doSomething(){
    if(someCondition){
        int foo = doThis();
    }
    // ---- 
    // remaining code
} 
private int doThis(){
    return 100;
}

如果您的方法返回void,这意味着它可能做的唯一工作就是产生副作用。这才是你真正想要测试的。

  1. 设置外部状态
  2. 运行正在测试的方法
  3. 你检查状态改变,因为你期望它改变。

为测试方法内的每个执行路径准备外部状态,这将涵盖代码的所有可能结果。

在做UnitTest时,你想测试可观察的行为,而不是代码

可观察的行为是:

  • (公共)接口方法返回值
  • 与其他对象(依赖)的交互
  • 对象状态的变化(通常是getter结果的变化)

通过被测类(CUT)的公共接口进行测试。这些公共接口不一定是指公共方法,而是指代码使用CUT调用的方法。


在您的情况下,您希望在调用方法时测试对象的状态变化作为副作用。

但是问题是你的代码没有改变对象的状态,所以什么都不能测试。

从技术上讲,你可以提高getter方法的可见性,并用Mockito模拟它,但这和整个代码一样没用。

修订


我写这些是因为OP有任务要做。我要强调的是,这是而不是


因为要观察的方法是私有的,所以你有两个选项:

  1. 使要观察的方法对测试类可见。然后你可以使用普通的Mockito功能:

    /*ClassUnderTest CUT */public void doSomething(){如果(someCondition) {int foo = doThis();}//----//剩余代码}/*包私有,测试类应该在同一个包*/int这么做(){返回100;}/* TestClass */@TestdoSomething__conditionTrue__callesMemberMethod(){ClassUnderTest cut = Mockito。间谍(新ClassUnderTest ());//使条件为真所需的任何东西cut.doSomething ();Mockito.verify(削减).doThis ();}@TestdoSomething__conditionFalse__doesNotCallMemberMethod(){ClassUnderTest cut = Mockito。间谍(新ClassUnderTest ());//使条件为假所需的任何东西cut.doSomething ();Mockito.verify(切,从不()).doThis ();} 
  2. 使用PowerMock (ito)
    但是PowerMockito改变了CUT的字节码,因此你并没有真正测试你的CUT。我强烈建议不要使用它,除非你必须测试遗留代码,否则无法测试。

相关内容

  • 没有找到相关文章

最新更新