当在数据库中找不到某些数据时,如何为异常情况编写Junit测试

问题描述

我正在以初级开发人员的身份从事一个项目。我经验很少。

我需要针对getCompanyByUserIdUSER_NOT_FOUND异常情况的COMPANY_NOT_FOUND编写单元测试。

当在数据库中找不到userIdcompanyId时,会发生这些异常。

代码段如下:

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

我假设您的userRepositorygetCompanyByUserId班上

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

}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...