gpt4 book ai didi

java - Mockito 使用正则表达式验证是否使用正确的参数调用了方法

转载 作者:搜寻专家 更新时间:2023-10-31 19:27:39 25 4
gpt4 key购买 nike

描述

我正在尝试测试以下类(class):

Class UserSynchronizer(){
private static org.apache.log4j.Logger log = ... ;

public Sync(candidate) {
...
if (candidate.inValidForSync()) {
log.debug("Candidate #" + candidate.getId() + ": Not syncing");
}
else {
log.debug("Syncing");
}
}

}

我想看看 mockito 是否可以检测调用 log.debug 的参数,然后我想看看我是否可以对其进行某种正则表达式检查。换句话说,我想:

  • 捕获提供给日志对象的参数(我在我的测试 atm 中模拟)
  • 检查(使用正则表达式)它是否匹配像“Candidate #\d+: Not syncing”这样的模式,以防我的模拟候选对象返回 false

测试代码

下面的代码是我的起点:

public void verifySyncDoesntSyncWhenInvalid(){
//Setup candidate mock
Candidate invalidSyncCandidateMock = mock(Candidate.class);
when(invalidSyncCandidateMock.inValidForSync()).thenReturn(true);

//Setup log mock
UserSynchronizer userSynchronizer = ...;
Field logField = userSynchronizer.getClass().getDeclaredField("log");
logField.setAccessible(true);
logField.set(userSynchronizer, logMock);

//Call sync
userSynchronizer.sync(invalidSyncCandidateMock);

//Verify that debug was called with ("Candidate #\d+: Not syncing")
???
}

问题

问题是 log.debug 被多次调用。我想捕获提供给 log.debug 的参数,并确保当它与对同步无效的候选人一起调用时,记录器对象会正确记录候选人未同步。

编辑:如果之前有人问过这个问题,我深表歉意。恳请您发布相关问题的链接 :)

最佳答案

Mockito 在标准中提供正则表达式匹配器 org.mockito.Matchers类(class)。下面是一个示例,说明如何使用此函数来验证具有正确参数值的调用:

verify(restMock, times(1)).exchange(matches(".*text=welcome.*to.*blah"), eq(HttpMethod.GET), any(ResponseEntity.class), eq(String.class));

关于java - Mockito 使用正则表达式验证是否使用正确的参数调用了方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28044782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com