【问题标题】:Is it a right case for Mockito spy?对于 Mockito 间谍来说,这是一个正确的案例吗?
【发布时间】:2010-09-11 20:03:46
【问题描述】:

假设我有一堂课

class SomeClass
{
  public void methodA()
  {}

  public void methodB()
  {}

  public void someMethod()
  {
     methodA();
     methodB();
  }
}

我想用 Mockito 测试 someMethod() 的行为。

我能想到的唯一方法是使用 spy();

有点像

SomeClass someClass = spy(new SomeClass());
someClass.someMethod();
InOrder inOrder = inOrder(someClass);
inOrder.verify(someClass).methodA();
inOrder.verify(someClass).methodB();

我是 mockito 的新手,文档说

“真正的间谍应谨慎使用,偶尔使用,例如在处理遗留代码时。”

所以也许我遗漏了一些东西,并且有更好(正确)的方法来验证是否调用了 methodA 和 methodB 而无需在测试用例中显式调用它们。

谢谢。

【问题讨论】:

    标签: java unit-testing mockito


    【解决方案1】:

    是的,spy() 适合您的目的。警告是由于调用了真实方法,因此您可能会得到意想不到的结果(例如 - 从银行账户中提取真实资金)

    【讨论】:

      【解决方案2】:

      如果您的代码需要 spy 进行单元测试 - 出了点问题。 间谍是代码异味的第一个迹象。 在您的示例中,您有两种选择可以避免它:

      1. 您可以避免模拟其中一种方法并测试整个 someMethod。
      2. 如果确实需要模拟 methodA 和 methodB - 您可以将它们移动到单独的类等中。

      【讨论】:

        猜你喜欢
        • 2022-12-20
        • 1970-01-01
        • 2015-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-17
        相关资源
        最近更新 更多