如何在服务层模拟一个方法
How to mock a method in Service layer
在对服务层的各个方法进行单元测试时,遇到了下面的场景,不知该如何测试:
public class UserServiceImpl{
@Autowired
UserRepository userRepository;
public void abc(){
xyz(obj);
}
private void xyz(){
userRepository.save(obj);
}
}
我要测试的是abc()
方法。在该方法中,它调用 xyz()
,这是一个使用 userRepository
依赖项的 PRIVATE 方法。因此,当我为 abc()
方法创建单元测试时,是否需要关注 xyz()
方法,因为它使用了依赖项?如果是,我需要遵循哪些步骤?
如您所写,您需要处理 xyz()
方法及其对 userRepository
的调用。您需要按如下方式模拟 userRepository
:
@ExtendWith(MockitoExtension.class)
public class UserServiceImplTest {
@Mock
private UserRepository userRepository;
@InjectMocks
public UserServiceImpl userService;
@BeforeEach
public void setUp() throws Exception {
// Mock UserRepository behaviour
doReturn(//return value).when(this.userRepository).save(any());
}
// Your tests here
}
因为这是一个 void 方法,您要做的是验证依赖项的 save
方法是否已使用参数 obj
调用了一次。您可以使用 Mockito
之类的东西来做到这一点。你的单元测试看起来像这样:
@Mock
private UserRepository mockUserRepository;
@InjectMocks
private UserServiceImpl sut;
@Test
public void abc_savesObject() {
// Arrange
...
// Act
sut.abc();
// Assert
verify(mockUserRepository,times(1)).save(obj);
}
一些有用的链接:
在对服务层的各个方法进行单元测试时,遇到了下面的场景,不知该如何测试:
public class UserServiceImpl{
@Autowired
UserRepository userRepository;
public void abc(){
xyz(obj);
}
private void xyz(){
userRepository.save(obj);
}
}
我要测试的是abc()
方法。在该方法中,它调用 xyz()
,这是一个使用 userRepository
依赖项的 PRIVATE 方法。因此,当我为 abc()
方法创建单元测试时,是否需要关注 xyz()
方法,因为它使用了依赖项?如果是,我需要遵循哪些步骤?
如您所写,您需要处理 xyz()
方法及其对 userRepository
的调用。您需要按如下方式模拟 userRepository
:
@ExtendWith(MockitoExtension.class)
public class UserServiceImplTest {
@Mock
private UserRepository userRepository;
@InjectMocks
public UserServiceImpl userService;
@BeforeEach
public void setUp() throws Exception {
// Mock UserRepository behaviour
doReturn(//return value).when(this.userRepository).save(any());
}
// Your tests here
}
因为这是一个 void 方法,您要做的是验证依赖项的 save
方法是否已使用参数 obj
调用了一次。您可以使用 Mockito
之类的东西来做到这一点。你的单元测试看起来像这样:
@Mock
private UserRepository mockUserRepository;
@InjectMocks
private UserServiceImpl sut;
@Test
public void abc_savesObject() {
// Arrange
...
// Act
sut.abc();
// Assert
verify(mockUserRepository,times(1)).save(obj);
}
一些有用的链接: