Mock-Objekt den Aufruf der Methode mit Spring Boot und Mockito
Ich versuche zu schreiben, ein test für diese Java-SpringBoot s-Klasse:
Speziell, ich bin versucht, "mock" - diesem Aufruf der Methode:
URI uri = util.getServiceUrl("product");
Dachte ich, ich sollte "mock" - die ServiceUtils
Objekt, um dies zu tun. Ich habe versucht, dies mit der @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 so ist es noch immer fordert der ursprünglichen ServiceUtils
Objekt, und nicht den "verspottet" ein. Habe auch versucht ohne die @Autowired
Anmerkung am ProductCompositeIntegration
, aber diese Ergebnisse in einem NullPointerException
.
Was mache ich falsch?
Meine main-Klasse sieht wie folgt aus:
@SpringBootApplication
@EnableCircuitBreaker
@EnableDiscoveryClient
public class ProductCompositeServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ProductCompositeServiceApplication.class, args);
}
}
Den ServiceUtils
Objekt, dass ich versucht bin, zu verspotten, der angegeben ist, in eine Klasse, versehen mit Feder @Component
Anmerkung zu injizieren und es in den anderen Klassen mit @Autowired
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach einer Menge von Versuch und Irrtum habe ich es geschafft, dieses problem zu lösen.
Ließ ich die
Anmerkungen oben die test-Klasse.
Markierte ich die Klasse, dass ich die Prüfung mit
@InjectMocks
und die Abhängigkeiten mit@Mock
:Ich bin mir nicht sicher, ob dies der beste Ansatz ("the Spring way"), aber das funktionierte für mich.
Dieser Artikel machte es mir alles klar: http://rdafbn.blogspot.be/2014/01/testing-spring-components-with-mockito.html
Schreiben Sie eine
FactoryBean
wieIn Ihrem
test-context.xml
Sie die folgenden Zeilen hinzu.Wenn Sie nicht mit XML-Konfiguration, dann müssen Sie das äquivalent zu dem oben in der Java-Konfiguration.