gpt4 book ai didi

methods - 是否可以以紧凑的方式使用 Mockito 验证任意交互?

转载 作者:行者123 更新时间:2023-12-04 20:50:26 25 4
gpt4 key购买 nike

在 Mockito 中很容易验证一个 mock 对象上发生了特定的交互(特定的方法调用),并且有 verifyZeroInteractions()用于检查是否没有发生任何交互。假设我正在使用诸如 info() 之类的方法测试一个接口(interface),例如记录器的接口(interface)。 , warn() , error()等等。在特定情况下,我知道应该调用其中一种方法,但我并不关心是哪一种。是否有一种紧凑的方法可以检查是否发生了与模拟对象的任何交互,而无需指定应该调用哪个确切的方法?或者也许这种机制是不必要的,因为测试它的“Mockito 方式”与我想象的不同?

最佳答案

使用 log4j,为了测试记录器,我执行以下设置:

@Mock private Appender log4jAppender;
private Logger logger;

@Before
public void setup() {
MockitoAnnotations.initMocks(this);

Logger root = Logger.getRootLogger();
if (!root.getAllAppenders().hasMoreElements()) {
// No appenders means log4j is not initialized!
BasicConfigurator.configure();
}
logger = Logger.getLogger(MyClassWhichLogs.class);
logger.addAppender(log4jAppender);
}

然后在我的测试中我执行以下操作:
verifyZeroInteractions(log4jAppender);

或者
verify(log4jAppender).doAppend(any(LoggingEvent.class);

如果您需要测试记录的值,您可以提供一个捕获器:
ArgumentCaptor<LoggingEvent> logCaptor = ArgumentCaptor.forClass(LoggingEvent.class);
verify(log4jAppender).doAppend(logCaptor.capture());
assertTrue(logCaptor.getValue().contains("my text to match");

虽然这不一定回答一般性问题(我认为您正在寻找的内容不存在),但它可以解决测试日志记录的特定问题。

关于methods - 是否可以以紧凑的方式使用 Mockito 验证任意交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11192187/

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