Java 当数据库中找不到某些数据时,如何为异常场景编写Junit测试
我是一名初级开发人员,正在从事一个项目。我几乎没有经验 我需要为Java 当数据库中找不到某些数据时,如何为异常场景编写Junit测试,java,junit,mocking,Java,Junit,Mocking,我是一名初级开发人员,正在从事一个项目。我几乎没有经验 我需要为未找到用户和未找到公司异常场景编写单元测试 当在数据库中找不到用户ID和公司ID时,会出现这些异常 代码片段如下所示: CompanyServiceImpl @Override public CompanyResponse getCompanyByUserId(String userId) { Optional<User> optionalUser = userRepository.findUs
未找到用户
和未找到公司
异常场景编写单元测试
当在数据库中找不到用户ID
和公司ID
时,会出现这些异常
代码片段如下所示:
CompanyServiceImpl
@Override
public CompanyResponse getCompanyByUserId(String userId) {
Optional<User> optionalUser = userRepository.findUserByUserId(userId);
if(optionalUser.isEmpty()){
throw new CompanyManagerException(USER_NOT_FOUND);
}
User user = optionalUser.get();
Optional<Company> optionalCompany = companyRepository.findCompanyByCompanyName(user.getCompanyName());
if(optionalCompany.isEmpty()){
throw new CompanyManagerException(COMPANY_NOT_FOUND);
}
您可以假设添加了相关的依赖项(Junit、Mockito等)。我认为这应该满足您的要求。您可能需要编写两个单独的测试用例来涵盖“用户未找到”和“公司未找到”。 未找到用户的测试用例:
@Test(expected = CompanyManagerException.class)
public void testGetCompanyShoukdThrowException(){
String userId = "UserId";
when(companyService.getCompanyByUserId(userId)).thenThrow(new CompanyManagerException("USER_NOT_FOUND"));
//actual call and assert statements will go here
}
如果不想使用前面的方法手动抛出finduserbyUserRepository,则需要模拟UserRepository并在调用findUserByUserId时返回空
when(userRepository.findUserByUserId(userId)).thenReturn(Optional.empty());
您需要在测试类中模拟
companyRepository
和userRepository
我假设您的getCompanyByUserId
在CompanyService
类中
@Mock
private CompanyRepository companyRepository;
@Mock
private UserRepository userRepository;
@InjectMocks
private CompanyService service;
@Test
public void testGetCompanyByUserIdException() {
Mockito.when(userRepository.findUserByUserId(Mockito.anyString())).thenReturn("");
Mockito.when(companyRepository.findCompanyByCompanyName(Mockito.anyString())).thenReturn(null);
try {
service.getCompanyByUserId("");
} catch(CompanyManagerException ex) {
//assert here for COMPANY_NOT_FOUND
}
}
您可以假设所需的所有库都已导入(如junit、lombok、assertj等)
@Mock
private CompanyRepository companyRepository;
@Mock
private UserRepository userRepository;
@InjectMocks
private CompanyService service;
@Test
public void testGetCompanyByUserIdException() {
Mockito.when(userRepository.findUserByUserId(Mockito.anyString())).thenReturn("");
Mockito.when(companyRepository.findCompanyByCompanyName(Mockito.anyString())).thenReturn(null);
try {
service.getCompanyByUserId("");
} catch(CompanyManagerException ex) {
//assert here for COMPANY_NOT_FOUND
}
}