我正在尝试通过测试服务层来学习模拟,但是
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();
}
}
答案 0 :(得分:0)
@InjectMocks
不会插入@Autowired
字段中。将CarService
更改为构造函数注入。
答案 1 :(得分:0)
结果是导入org.junit.jupiter.api.Test,我改为org.junit.Test,它工作正常。