Java 使用传递给模拟对象的函数进行测试
我有一个简单的函数,它最近被一些附加逻辑包装起来。我正在努力更新测试逻辑,因为突然间,方法体被包装在一个模拟中 让我给你举个例子 前逻辑与测试:Java 使用传递给模拟对象的函数进行测试,java,junit,mockito,Java,Junit,Mockito,我有一个简单的函数,它最近被一些附加逻辑包装起来。我正在努力更新测试逻辑,因为突然间,方法体被包装在一个模拟中 让我给你举个例子 前逻辑与测试: // logic public void doSomething(Transaction t, int a) { myService.foo(t, a); } 还有我的测试: // test TestedService service; @Mock MyService myService; @Mock Transaction t; @Tes
// logic
public void doSomething(Transaction t, int a) {
myService.foo(t, a);
}
还有我的测试:
// test
TestedService service;
@Mock
MyService myService;
@Mock
Transaction t;
@Test
public void testSomething() {
testedService.doSomething(t, 10);
Mockito.verify(myService).foo(t, 10);
}
发生的事情是,我们将逻辑包装在一些附加函数中:
public void doSomething(Transaction t, int a) {
model.runInEnhancedTransaction(t, t2 -> { myService.foo(t2, a) });
}
我的问题是,当逻辑突然被包装在model
方法中(model在我的测试中是一个mock)时,我如何测试这一点
我基本上需要验证t2->{myService.foo(t2,a)}
是在model
对象是模拟对象时调用的
编辑:为了测试的目的,我实现了我的自定义版本的
模型
,但仍然想知道是否有更优雅的方法。测试这类lambda调用有点困难。我要做的是执行两个测试:一个是调用model.runinehancedtransaction()
,另一个是调用model.runinehancedtransaction()
本身。乙二醇
@Test
void doSomethingCallsModelEnhancedTransaction() {
testedService.doSomething(t, 10);
verify(model).runInEnhancedTransaction(eq(t), any());
}
@Test
void modelRunInEnhancedTransaction() {
Transaction t = mock(Transaction.class);
BiConsumer<Transaction, Integer> consumer = mock(Biconsumer.class);
model.runInEnhancedTransaction(t, consumer);
verify(consumer).accept(...);
}
@测试
void doSomethingCallsModelEnhancedTransaction()无效{
测试服务剂量(t,10);
验证(模型)。运行InEnhancedTransaction(eq(t),any());
}
@试验
作废模型RunInEnhancedTransaction(){
事务t=mock(Transaction.class);
BiConsumer consumer=mock(BiConsumer.class);
模型.RunineHancedTransaction(t,消费者);
验证(消费者)。接受(…);
}
测试这类lambda调用有点困难。我要做的是执行两个测试:一个是调用model.runinehancedtransaction()
,另一个是调用model.runinehancedtransaction()
本身。乙二醇
@Test
void doSomethingCallsModelEnhancedTransaction() {
testedService.doSomething(t, 10);
verify(model).runInEnhancedTransaction(eq(t), any());
}
@Test
void modelRunInEnhancedTransaction() {
Transaction t = mock(Transaction.class);
BiConsumer<Transaction, Integer> consumer = mock(Biconsumer.class);
model.runInEnhancedTransaction(t, consumer);
verify(consumer).accept(...);
}
@测试
void doSomethingCallsModelEnhancedTransaction()无效{
测试服务剂量(t,10);
验证(模型)。运行InEnhancedTransaction(eq(t),any());
}
@试验
作废模型RunInEnhancedTransaction(){
事务t=mock(Transaction.class);
BiConsumer consumer=mock(BiConsumer.class);
模型.RunineHancedTransaction(t,消费者);
验证(消费者)。接受(…);
}
型号来自哪里?它只是类中注入的另一项服务,与MyService
的方式相同。在测试中,它是一个模拟。模型
来自哪里?它只是类中注入的另一个服务,与MyService
的方式相同。在测试中,它是一个模拟。