在Java中使用Mockito进行单元测试时,对于void方法,我们需要使用doAnswer
、doThrow
或doNothing
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import static org.mockito.Mockito.*;
public class MyServiceTest {
@Test
public void testVoidMethod() {
// 创建一个mock对象
MyService myService = Mockito.mock(MyService.class);
// 使用doNothing,这意味着void方法将被忽略
doNothing().when(myService).myVoidMethod();
// 调用void方法
myService.myVoidMethod();
// 验证方法是否被调用
verify(myService, times(1)).myVoidMethod();
}
}
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import static org.mockito.Mockito.*;
public class MyServiceTest {
@Test
public void testVoidMethodWithAnswer() {
// 创建一个mock对象
MyService myService = Mockito.mock(MyService.class);
// 使用doAnswer允许我们指定一个自定义的行为
doAnswer(new Answer<Void>() {
public Void answer(InvocationOnMock invocation) {
// 在这里编写你的行为,如果需要
System.out.println("myVoidMethod被调用");
return null;
}
}).when(myService).myVoidMethod();
// 调用void方法
myService.myVoidMethod();
// 验证方法是否被调用
verify(myService, times(1)).myVoidMethod();
}
}
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import static org.mockito.Mockito.*;
public class MyServiceTest {
@Test
public void testVoidMethodWithThrow() {
// 创建一个mock对象
MyService myService = Mockito.mock(MyService.class);
// 使用doThrow,当调用void方法时将抛出异常
doThrow(new RuntimeException("抛出异常")).when(myService).myVoidMethod();
// 调用void方法并捕获异常
try {
myService.myVoidMethod();
} catch (RuntimeException e) {
// 验证异常
assertEquals("抛出异常", e.getMessage());
}
// 验证方法是否被调用
verify(myService, times(1)).myVoidMethod();
}
}
这些示例展示了如何使用Mockito处理void方法的单元测试。你可以根据具体需求选择使用doNothing,doAnswer或doThrow。
领取专属 10元无门槛券
手把手带您无忧上云