【发布时间】:2019-11-18 16:46:54
【问题描述】:
我无法在服务层为我的 Spring Boot 应用程序运行单元测试,因为它在 List<Student> expectedList = studentService.findAl(); 行给了我空指针异常。但是,如果我直接调用模拟,它可以工作List<Student> expectedList = studentRepository.findAll();。 studentRepository 被注入到 studentService 中。谁能说明问题是什么?
测试类:
import com.demo.student.demo.entity.Student;
import com.demo.student.demo.repository.StudentRepository;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import static org.mockito.Mockito.*;
import java.util.ArrayList;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
public class StudentServiceImplTest {
@Mock
private StudentRepository studentRepository;
@InjectMocks
private StudentServiceImpl studentService;
@Test
public void findAll(){
List<Student> studentList = new ArrayList<>();
studentList.add(new Student(1, "person1", "person1@mail.com"));
studentList.add(new Student(2, "person2", "person2@mail.com"));
when(studentRepository.findAll()).thenReturn(studentList);
List<Student> expectedList = studentService.findAl();
assertEquals(0, expectedList.size());
}
}
和存储库:
@Repository
public interface StudentRepository extends JpaRepository<Student, Long> {
}
服务接口:
public interface StudentService {
public List<Student> findAl();
public Student findById(long id);
public Student saveOrUpdate(Student student);
public void deleteById(long id);
}
以及服务实现:
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentRepository studentRepository;
@Override
public List<Student> findAl() {
return studentRepository.findAll();
}
@Override
public Student findById(long id) {
Optional<Student> student = studentRepository.findById(id);
boolean exist = student.isPresent();
return exist? student.get() : null;
}
@Override
public Student saveOrUpdate(Student student) {
studentRepository.save(student);
return student;
}
@Override
public void deleteById(long id) {
studentRepository.deleteById(id);
}
}
【问题讨论】:
标签: java spring unit-testing junit mockito