mockito怎么mock service中的service
时间: 2023-09-12 12:07:36 浏览: 244
mockServer,mock服务端
如果您想使用 Mockito 来模拟一个 Service 中的另一个 Service,可以按照以下步骤进行操作:
1. 在测试类中创建被测试 Service 的实例。
2. 使用 Mockito.mock() 方法来创建要模拟的 Service 的 mock 对象。
3. 使用 Mockito.when() 方法来指定当调用 mock 对象的某个方法时应该返回什么值。
4. 将 mock 对象注入到被测试 Service 中。
例如,假设您有一个 UserService 和一个 EmailService,UserService 依赖于 EmailService 来发送电子邮件。您想要测试 UserService 的某个方法并且希望在测试中模拟 EmailService。可以按照以下步骤进行操作:
```java
public class UserServiceTest {
private UserService userService;
private EmailService emailServiceMock;
@BeforeEach
public void setUp() {
emailServiceMock = Mockito.mock(EmailService.class);
userService = new UserService(emailServiceMock);
}
@Test
public void testSendEmailToUser() {
User user = new User("test@example.com");
Mockito.when(emailServiceMock.sendEmail(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(true);
boolean result = userService.sendEmailToUser(user, "Subject", "Body");
assertTrue(result);
}
}
```
在上面的示例中,我们首先创建了一个 EmailService 的 mock 对象 emailServiceMock,并使用它来创建 UserService 的实例。然后,我们在测试方法中使用 Mockito.when() 方法指定当调用 emailServiceMock 的 sendEmail() 方法时,应该返回 true。最后,我们调用 UserService 的 sendEmailToUser() 方法,并断言其返回值为 true。
需要注意的是,如果 EmailService 是通过 Spring 容器进行注入的,则在测试环境下,可以使用 @MockBean 注解来创建 EmailService 的 mock 对象,然后将其注入到 UserService 中。例如:
```java
@SpringBootTest
public class UserServiceTest {
@Autowired
private UserService userService;
@MockBean
private EmailService emailServiceMock;
@Test
public void testSendEmailToUser() {
User user = new User("test@example.com");
Mockito.when(emailServiceMock.sendEmail(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(true);
boolean result = userService.sendEmailToUser(user, "Subject", "Body");
assertTrue(result);
}
}
```
在上面的示例中,我们使用 @MockBean 注解来创建 EmailService 的 mock 对象,并将其注入到 UserService 中。这样做的好处是,在 Spring 容器中,UserService 将使用 mock 对象而不是实际的 EmailService 实例来发送邮件。
阅读全文