Sto cercando di scrivere un test per la classe questo di Java SpringBoot:Mock metodo oggetto chiamata utilizzando primavera Boot e Mockito
In particolare, sto cercando di questa chiamata al metodo "finto" :
URI uri = util.getServiceUrl("product");
ho capito che dovrei "finto" l'oggetto ServiceUtils
al fine di fare questo. Ho provato questo utilizzando le @Mock
e @InjectMocks
annotazioni:
@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();
}
}
Ma in questo modo si chiama ancora il ServiceUtils
oggetto originale, e non il "deriso" uno. Anche provato senza l'annotazione @Autowired
allo ProductCompositeIntegration
, ma questo si traduce in un NullPointerException
.
Cosa sto sbagliando?
mia classe principale appare così:
@SpringBootApplication
@EnableCircuitBreaker
@EnableDiscoveryClient
public class ProductCompositeServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ProductCompositeServiceApplication.class, args);
}
}
L'oggetto ServiceUtils
che sto cercando di prendere in giro è specificato in una classe, annotato con @Component
annotazioni di primavera per iniettare in altre classi utilizzando @Autowired
.
Mi è piaciuto il tuo approccio. Era esattamente quello che stavo cercando. – user2957378