问题描述
我正在以初级开发人员的身份从事一个项目。我经验很少。
我需要针对getCompanyByUserId
和USER_NOT_FOUND
异常情况的COMPANY_NOT_FOUND
编写单元测试。
当在数据库中找不到userId
和companyId
时,会发生这些异常。
代码段如下:
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);
}
供您参考,以下是我编写的成功方案的测试:
CompanyControllerTest
@Test
public void testGetCompany() {
String companyId = "companyId";
when(companyService.getCompanyByUserId(companyId)).thenReturn(new CompanyResponse());
ResponseEntity<CompanyResponse> response = companyController.getCompany(companyId);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(response.getBody()).isInstanceOf(CompanyResponse.class);
}
您可以假定已添加了相关的依赖项(Junit,Mockito等)。
解决方法
如果您不想使用以前的方法手动将其抛出,则需要模拟UserRepository并在调用findUserByUserId时返回空值
when(userRepository.findUserByUserId(userId)).thenReturn(Optional.empty());
,
您需要在Test类中模拟<div className="admin-content">
<Switch>
<Route exact path="/app/dashboard" component={ Dashboard } />
<Route exact path="/app/exams" component={ Exam } />
<Redirect exact from="/app" to="/app/dashboard" />
<Redirect to="/404" />
</Switch>
</div>
和companyRepository
。
我假设您的userRepository
在getCompanyByUserId
班上
CompanyService
,
我相信这应该可以满足您的要求。您可能必须编写两个单独的测试用例来涵盖“ user_not_found”和“ company_not_found”。 找不到用户的测试用例:
@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
}