【发布时间】: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