Ich habe einen @ Service, den ich versuche, in einem Unit Test zu verspotten, aber ich bekomme bisher einen Null-Wert. In der Anwendungsklasse gebe ich an, was die scanBasePackages sind. Muss ich das anders machen? Vielen Dank.@Service im Komponententest in SpringBoot-Projekt nicht injizieren
Dies ist meine Service-Klasse, die eine Schnittstelle implementiert:
@Service
public class DeviceService implements DeviceServiceDao {
private List<Device> devices;
@Override
public List<Device> getDevices(long homeId) {
return devices;
}
}
Das ist mein Gerät zu testen.
public class SmartHomeControllerTest {
private RestTemplate restTemplate = new RestTemplate();
private static final String BASE_URL = “..”;
@Mock
private DeviceService deviceService;
@Test
public void getHomeRegisteredDevices() throws Exception {
Device activeDevice = new DeviceBuilder()
.getActiveDevice(true)
.getName("Alexa")
.getDeviceId(1)
.getHomeId(1)
.build();
Device inativeDevice = new DeviceBuilder()
.getInactiveDevice(false)
.getName("Heater")
.getDeviceId(2)
.getHomeId(1)
.build();
UriComponentsBuilder builder = UriComponentsBuilder
.fromUriString(BASE_URL + "/1/devices");
List response = restTemplate.getForObject(builder.toUriString(), List.class);
verify(deviceService, times(1)).getDevices(1);
verifyNoMoreInteractions(deviceService);
}
ich diesen Teil geändert haben. Ich konzentrierte mich auf das Injektionsproblem. Aber du hast wahrscheinlich Recht. Ich stelle auch fest, dass das OP keine Aussage über die abgerufene "Liste" macht. – davidxxx
Ich habe die SpringBootTest- und MockBean-Annotation hinzugefügt, aber jetzt bekomme ich einen Null-Kontext: "Verursacht von: java.lang.IllegalArgumentException: Kann keinen ApplicationContext mit einem NULL 'contextLoader' laden. Erwägen Sie Ihre Testklasse mit @ContextConfiguration oder @ContextHierarchy . " – user1140656