【问题标题】:Mock same statement twice两次模拟相同的语句
【发布时间】:2015-05-28 20:58:46
【问题描述】:

我有一个带有以下语句的 Java 方法:

public void someMethod() {
  .....
  Long firstVal = someService.getSomeObject().getId();
  Long secondVal = someService.getSomeObject().getNextFunc().getOtherObject().getId();
  .....
}

现在我正在尝试测试此方法,并在模拟设置中尝试这样做:

@RunWith(MockitoJUnitRunner.class)
public class SomeServiceTest {
  @Mock SomeService mockSomeService;
  SomeObject someObject = new SomeObject();

  @Before
  public void setup() {
    someObject.setId(123456);
    when(mockSomeService.getSomeObject).thenReturn(someObject);
    //...
  }
  //...
}

现在如何模拟 secondVal?

【问题讨论】:

    标签: java unit-testing mockito


    【解决方案1】:

    当您配置模拟时,您为它提供(比方说)一个故事板。你告诉它你期望它采取什么行动。因此,您可以创建两个 SomeObject 实例并配置对不同方法的调用。如果它是相同的方法,这甚至可以工作。

    我更改了你的代码:

      SomeObject someObject1 = new SomeObject();
      SomeObject someObject2 = new SomeObject();
    
      @Before
      public void setup() {
        someObject1.setId(123456);
        someObject2.setId(123457);
        when(mockSomeService.getSomeObject).thenReturn(someObject1);
        when(mockSomeService.getSomeObject.getNextFunc.getOtherObject).thenReturn(someObject2);
        //...
      }
      //...
    }
    

    【讨论】:

    • 我正在尝试测试整个方法。我已经更新了我的问题。