Ich versuche, einen Test für dieses Java SpringBoot Klasse zu schreiben:Mock-Objekt Methodenaufruf mit Spring-Boot und Mockito
Insbesondere Ich versuche, diese Methode Aufruf "mock" :
URI uri = util.getServiceUrl("product");
ich fand heraus, ich „Mock“ die ServiceUtils
Objekt, um dies tun sollte. Ich habe versucht, diese mit den @Mock
und @InjectMocks
Anmerkungen:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ProductCompositeServiceApplication.class)
public class ProductCompositeIntegrationTest {
@InjectMocks
@Autowired
private ProductCompositeIntegration productIntegration;
@Autowired
private RestTemplate restTemplate;
@Mock
private ServiceUtils util;
private MockRestServiceServer mockServer;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mockServer = MockRestServiceServer.createServer(restTemplate);
}
@Test
public void myTest() {
Mockito.when(util.getServiceUrl("product")).thenReturn(URI.create("http://localhost:8080/test"));
ResponseEntity<Iterable<Product>> products = productIntegration.getAllProducts();
}
}
Aber auf diese Weise es immer noch das ursprüngliche ServiceUtils
Objekt aufruft, und nicht die „verspottet“ ein. Auch ohne die @Autowired
Annotation an der ProductCompositeIntegration
versucht, aber dies ergibt eine NullPointerException
.
Was mache ich falsch?
Meine Haupt Klasse sieht wie folgt aus:
@SpringBootApplication
@EnableCircuitBreaker
@EnableDiscoveryClient
public class ProductCompositeServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ProductCompositeServiceApplication.class, args);
}
}
Das ServiceUtils
Objekt, das ich zu verspotten versuchen in einer Klasse angegeben, kommentierte mit Spring @Component
Anmerkung es in die anderen Klassen zu injizieren @Autowired
mit .
Ich mochte Ihren Ansatz. Es war genau das, wonach ich suchte. – user2957378