如何多次模拟具有不同参数的一种方法?

我有一些测试方法:


@Test

public void test_method() {

    MyObj mock = mock(MyObj.class);

    when(mock.get("testName", "1")).thenReturn("Result1");

    when(mock.get("test", "2")).thenReturn("rrrr");

}

当我尝试运行这个方法时,我遇到了异常:


org.mockito.exceptions.misusing.PotentialStubbingProblem: 

Strict stubbing argument mismatch. Please check:


Typically, stubbing argument mismatch indicates user mistake when writing tests.

Mockito fails early so that you can debug potential problem easily.

However, there are legit scenarios when this exception generates false negative signal:

  - stubbing the same method multiple times using 'given().will()' or 'when().then()' API

    Please use 'will().given()' or 'doReturn().when()' API for stubbing.

  - stubbed method is intentionally invoked with different arguments by code under test

    Please use default or 'silent' JUnit Rule (equivalent of Strictness.LENIENT).

For more information see javadoc for PotentialStubbingProblem class.

我如何模拟这个方法?


慕丝7291255
浏览 198回答 3
3回答

当年话下

错误消息告诉您:'given().will()'使用或API多次存根同一方法'when().then()'请使用'will().given()'或'doReturn().when()'API 进行存根。

慕盖茨4494581

您可以使用any()来模拟具有不同参数的一种方法。any() 将用作动态变量。例如 doReturn(order).when(orderRepository).save(any(Order.class));我使用 2 个不同的 Order 参数保存 orderRepository,因此我将任何一个与 Order 类一起使用。

侃侃尔雅

对我来说,添加注释 @MockitoSettings(strictness = Strictness.LENIENT)@ExtendWith(MockitoExtension::class) @MockitoSettings(strictness = Strictness.LENIENT)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java