Mockito修改方法行为



我有以下接口:

public interface Test{
    public void block(String modifier);
    public boolean blocked(String modifier);
}

所以我想按以下方式模拟此界面:

Test m = Mockito.mock(Test.class);
when(m.blocked(Mockito.any()).thenReturn(true);
//I want to mock m.block()

但是我想模拟Test::block(String)的方式,因此当它在某些String someString上被调用时,它会改变行为,以便m.blocked(someString)返回false

可以在Mockito中这样做吗?

您可以使用thenAnswerdoAnswer在调用方法时执行任意代码。例如,您可以使用Set来跟踪已经被阻止的字符串:

Set<Object> blocked = new HashSet<>();
Test m = mock(Test.class);
doAnswer(invocation -> blocked.add(invocation.getArguments()[0]))
    .when(m).block(any());
when(m.blocked(any()))
    .thenAnswer(invocation -> !blocked.contains(invocation.getArguments()[0]));

这是一个示例,假设您有一个布尔字段,以true开头 -

when(m.blocked(Mockito.any()).thenAnswer(invocation -> this.mockValue);
when(m.block(Mockito.eq("Some String")).thenAnswer(invocation -> {
    this.mockValue = false;
    return null;
});

希望我没有弄错语法: - )

相关内容

  • 没有找到相关文章

最新更新