代码之家  ›  专栏  ›  技术社区  ›  fnCzar

如何仅在第一次调用mock方法时引发异常?

  •  35
  • fnCzar  · 技术社区  · 16 年前

    public void doCommit() { }
    

    为了让它失败,我使用这个约定:

    doThrow(new RuntimeException()).when(mMockedObject).doCommit();
    

    2 回复  |  直到 16 年前
        1
  •  64
  •   fnCzar    16 年前

    我想出来了(伊戈尔给了我一些提示)。以下是如何存根连续的void方法调用:

    doThrow(new RuntimeException()).doNothing().doThrow(...).doNothing().when(mMockedObject).doCommit();
    

        2
  •  21
  •   Igor Zevaka    16 年前

    阅读 Stubbing Consecutive Calls doco ,类似这样的操作可能会:

    when(mMockedObject.doCommit())
      .thenThrow(new RuntimeException())
      .thenCallRealMethod() 
      .thenThrow(new RuntimeException())
      .thenCallRealMethod();
    

    如果您不想实际调用底层方法,那么应该使用 thenAnswer thenCallRealMethod 方法并提供一个空的存根实现。