gpt4 book ai didi

unit-testing - 基于Consumer功能接口(interface)的单元测试回调

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

我正在尝试对在 Consumer 功能接口(interface)中作为回调运行的代码进行单元测试。

@Component
class SomeClass {

@Autowired
private SomeInteface toBeMockedDependency;

public method() {
toBeMockedDependency.doSomething(message -> {
// Logic under test goes here
// (implements java.util.function.Consumer interface)
...
});
}
}

@RunWith(MockitoJUnitRunner.class)
public class SomeClassTest {
@InjectMocks
private SomeClass someClass;
@Mock
private SomeInteface toBeMockedDependency;

@Test
public void testMethod() {
...
someClass.method();
...
}
}

本质上,我想通过“toBeMockedDependency”向测试代码提供一些经过测试的“消息”。

如何模拟“toBeMockedDependency”以提供预定义的消息?
这是正确的方法吗?

最佳答案

不要试图制造 toBeMockedDependency自动调用您的功能接口(interface)。相反,使用 @Captorcapture匿名函数式接口(interface),然后使用您的测试手动调用它。

@RunWith(MockitoJUnitRunner.class)
public class SomeClassTest {
@InjectMocks
private SomeClass someClass;
@Mock
private SomeInteface toBeMockedDependency;
@Captor
private ArgumentCaptor<Consumer<Message>> messageConsumerCaptor;

@Test
public void testMethod() {
someClass.method();
verify(toBeMockedDependency).doSomething(messageConsumerCaptor.capture());
Consumer<Message> messageConsumer = messageConsumerCaptor.getValue();

// Now you have your message consumer, so you can test it all you want.
messageConsumer.accept(new Message(...));
assertEquals(...);
}
}

关于unit-testing - 基于Consumer功能接口(interface)的单元测试回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39017627/

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