【问题标题】:Testing service layer in Spring Boot using Mockito使用 Mockito 在 Spring Boot 中测试服务层
【发布时间】:2020-08-20 02:42:56
【问题描述】:

我正在尝试使用通过存储库层连接到数据库的 mockito 对我的服务层进行单元测试。

我的测试用例:

@InjectMocks
private EmployeeService employeeService;

@Mock
private EmployeeRepository employeeRepository;     

@Test
public void getActionFromEmployeeIdTest() throws ActionException {
 //setup     
 when(employeeRepository.getActionsByEmployeeId(anyLong()).thenReturn(EmployeeEntity);

 // exercise
 List<Employee> result = employeeService.getActionsByEmployeeIdService(101);

 //verify
 assertEqual(EmployeeEntity, result);
}

服务层:

@Service
public class EmployeeService {
    @Override
    public List<EmployeeUser> getActionsByEmployeeIdService(long employeeId)  {
        Employee employee = employeeRepository.findByEmployeeIdId(employeeId);
        List<EmployeeUser> actions = employeeUserRepository.getActionsByEmployeeId(employeeId);
        return actions;
}

存储层:

@Repository
public interface EmployeeUserRepository extends JpaRepository<EmployeeUser,Long> {
    @Transactional
    @Query(value = "Select e from EmployeeUser e where e.employeeId = :employeeId" )
    List<EmployeeUser> getActionsByEmployeeId(@Param("employeeId") long employeeId);
}

我将@InjectMocks 用于employeeService@Mock 用于employeeRepository

result 似乎返回 null。无论如何我可以在我的测试中返回一个非空值吗?

【问题讨论】:

  • 为什么getActionssByEmployeeId(anyLong(), anyString()) 有两个参数,而它的声明只有一个?
  • @StavShamir,我的错,这是一个错字。由于同样的原因,测试仍然失败
  • 你能提供你的整个测试课程吗?类级别的注释在这里也很重要。
  • @StavShamir 完成

标签: spring-boot testing junit mockito spring-repositories


【解决方案1】:

您正在使用 employeeRepository 的引用来调用 getActionssByEmployeeId(anyLong()) 方法。

when(employeeRepository.getActionssByEmployeeId(anyLong()).thenReturn(EmployeeEntity);

但是在服务类中,这个方法被 employeeUserRepository

调用
List<EmployeeUser> actions = employeeUserRepository.getActionsByEmployeeIdId(employeeId);

请检查一下。

【讨论】:

  • employeeRepository 和employeeUserRepository 是分别被模拟和自动装配到同一个@Repositroy 接口的变量
  • 你还嘲笑 getActionssByEmployeeId 而不是 getActionsByEmployeeId 还是这是一个错字?
  • 添加了测试类并修复了错别字
  • 在您嘲笑的方法名称中仍然存在拼写错误。你为什么不把实际的测试课放在这里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多