如何解决当在数据库中找不到某些数据时,如何为异常情况编写Junit测试
我正在以初级开发人员的身份从事一个项目。我经验很少。
我需要针对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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。