Je face à la même problème hier et pour être complet, voici ma solution:
Ceci est ma configuration « live » sous src/main/java/.../config
:
//the regular configuration not active with test profile
@Configuration
@Profile("!test")
public class WebConfig {
@LoadBalanced
@Bean
RestTemplate restTemplate() {
//you can use your regular rest template here.
//This one adds a X-TRACE-ID header from the MDC to the call.
return TraceableRestTemplate.create();
}
}
J'ai ajouté cette configuration dans le dossier de test src/main/test/java/.../config
:
//the test configuration
@Configuration
@Profile("test")
public class WebConfig {
@Bean
RestTemplate restTemplate() {
return TraceableRestTemplate.create();
}
}
Dans le cas de test, j'activé le profil test
:
//...
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ServerCallTest {
@Autowired
private IBusiness biz;
@Autowired
private RestTemplate restTemplate;
private ClientHttpRequestFactory originalClientHttpRequestFactory;
@Before
public void setUp() {
originalClientHttpRequestFactory = restTemplate.getRequestFactory();
}
@After
public void tearDown() {
restTemplate.setRequestFactory(originalClientHttpRequestFactory);
}
@Test
public void fetchAllEntries() throws BookListException {
MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
mockServer
.andExpect(method(HttpMethod.GET))
.andExpect(header("Accept", "application/json"))
.andExpect(requestTo(endsWith("/list/entries/")))
.andRespond(withSuccess("your-payload-here", MediaType.APPLICATION_JSON));
MyData data = biz.getData();
//do your asserts
}
}
Si vous êtes d'accord avec le service moqueur B, vous pouvez utiliser 'MockRestServiceServer'. Je peux partager un exemple. – barbakini
Cela pourrait être une option, mais je voudrais inclure l'appel de service réel, même si la réponse est en conserve. – derSteve
Lors de l'utilisation de 'MockRestServiceServer', l'amorçage par ressort fait en réalité l'objet d'un appel. mais seulement cet appel il attrapé par le 'MockRestServiceServer' et il renvoie la réponse que vous avez déterminée. Et pour la partie eureka. C'est déjà un travail de cadre bien cuit et vous n'avez pas besoin de le tester (pour des problèmes de balance de ruban ou de charge, etc.) – barbakini