gpt4 book ai didi

java - 在没有 ArgumentCaptor 的情况下匹配可变对象

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:01:32 25 4
gpt4 key购买 nike

我必须测试一个使用可变对象的方法

private final List<LogMessage> buffer;
...
flushBuffer() {
sender.send(buffer);
buffer.clear();
}

我需要测试它发送的缓冲区大小是否准确。
ArgumentCaptor 不适用,因为捕获的集合在断言时是明确的。

是否有一种匹配器可以重用 Hamcrest 的 hasSize() 并在方法调用时正确检查?

我更喜欢这种假设的 collectionWhich 匹配器:

bufferedSender.flushBuffer();
verify(sender).send(collectionWhich(hasSize(5)));

最佳答案

David 想法的轻量级替代方案:使用 Answer 在通话时制作副本。未经测试的代码,但这应该非常接近:

final List<LogMessage> capturedList = new ArrayList<>();
// This uses a lambda, but you could also do it with an anonymous inner class:
// new Answer<Void>() {
// @Override public Void answer(InvocationOnMock invocation) { /* ... */ }
// }
when(sender.send(any())).thenAnswer(invocation -> {
List<LogMessage> argument = (List<LogMessage>) invocation.getArguments()[0];
capturedList.addAll(argument);
});
bufferedSender.flushBuffer();
assertThat(capturedList).hasSize(5);

关于java - 在没有 ArgumentCaptor 的情况下匹配可变对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50025561/

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