【问题标题】:Stub a method but still check if it was called using mockito存根一个方法,但仍然检查它是否使用 mockito 调用
【发布时间】:2017-08-21 23:11:12
【问题描述】:
protected void function1(arg1, arg2, arg3) throws Exception {
    Object myObject = buildMyObjectUsing(arg1, arg2, arg3);
    if(SOME_BOOLEAN){
        functionA(arg1, myObject)
    } else{
            myObject.functionB(arg1)
    }
}

我正在使用遗留代码并将 void functionA 添加到 function1。我现在正在尝试编写一个测试,以确保在 SOME_BOOLEAN 为 true 时调用 functionA,但在 SOME_BOOLEAN 为 false 时不会调用它。

有没有办法可以伪造 functionA 以便它实际上不会被调用,但我仍然可以看到它会在 SOME_BOOLEAN 为真时被调用?现在 functionA 坏了,所以我写的测试一直失败,因为 functionA 抛出了一个异常。

同样,我并不担心测试 functionA 是否真的有效,只是它会被调用。

【问题讨论】:

  • 如果是这种情况,你的测试用例应该只测试 SOME_BOOLEAN 为真,对吧?
  • 我正在尝试进行一个测试,该测试仅在调用 functionA 时通过,因为 SOME_BOOLEAN 为真。如果在 SOME_BOOLEAN 为 false 时调用 functionA,则测试应该失败。这有帮助吗?我是单元测试的新手,所以我可能会倒退。
  • 函数是私有的吗?
  • no functionA 不是私有的。目前它是一个受保护的虚空

标签: java junit mockito


【解决方案1】:

在测试方法中,可以测试实际类的继承类,可以重写函数aA

final boolean[] methodCalled = new boolean[1]; 
MyClass testTarget = new MyClass()
{
   void functionA(args)
  {
    methodCalled[0] = true;
  }

};

testTarget.function1(arg1, arg2, arg3);
//assert methodCalled[0] is true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 2013-11-14
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多