Mockito抛出NullPointer异常测试服务层

时间:2020-03-25 12:01:53

标签: spring-boot mockito

我正在尝试通过测试服务层来学习模拟,但是

CarServiceTest.java

@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration(classes = {CarService.class})
public class CarServiceTest {

@InjectMocks
private CarService carService;

@Mock
private CarRepository carRepository;


@Test
public void getCarDetails_returnsCarInfo() {
    //Mockito.when **** is not able to mock, not sure why.
    Mockito.when(this.carRepository.findByName("prius")).thenReturn(new Car("prius","hybrid"));

    Car expected = new Car("prius", "hybrid");
    //Car expected = carService.getCarDetails("prius");

    Assertions.assertThat(expected.getName()).isEqualTo("prius");
    Assertions.assertThat(expected.getType()).isEqualTo("hybrid");
}

CarService.java

 @Service
 public class CarService {

@Autowired
CarRepository carRepository;

public Car getCarDetails(String name) {
    Car car = carRepository.findByName(name);
    if (car == null) {
        throw new CarNotFoundException();
    }

    System.out.println(car.getName());
    return car;
}

CarRepository.java

@Repository
public class CarRepository {

public Car findByName(String name) {
    if (name.equals("prius")){
        Car car = new Car("prius", "hybrid");
        return car;
    } else {
        throw new CarNotFoundException();
    }
}

2 个答案:

答案 0 :(得分:0)

@InjectMocks不会插入@Autowired字段中。将CarService更改为构造函数注入。

答案 1 :(得分:0)

结果是导入org.junit.jupiter.api.Test,我改为org.junit.Test,它工作正常。