Можно ли использовать MockMvc и макетировать только RestTemplate, используемый моим сервисом? - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь создать один интеграционный тест, используя MockMvc, и хочу макетировать только RestTemplate, используемый MyService.java. Если я раскомментирую код в MyIT.java, этот тест не пройден, потому что шаблон RestTemplate, используемый MockMvc, также будет подвергнут ложной проверке.

MyRest.java

@RestController
public class MyRest {

    @Autowired
    private MyService myService;

    @RequestMapping(value = "go", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<String> go() throws IOException {
        myService.go();
        return new ResponseEntity<>("", HttpStatus.OK);
    }
}

MyService.java

@Service
public class MyService {

    @Autowired
    private RestTemplate restTemplate;

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
       return builder.build();
    }

    public void go() {
        restTemplate.getForObject("http://md5.jsontest.com/?text=a", String.class);
    }
}

MyIT.java

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@AutoConfigureMockMvc
//@RestClientTest(MyService.class)
public class MyIT {

    @Autowired
    private MockMvc mockMvc;

//    @Autowired
//    private MockRestServiceServer mockRestServiceServer;

    @Test
    public void shouldGo() throws Exception {

//    mockRestServiceServer.expect(requestTo("http://md5.jsontest.com/?text=a"))
//              .andRespond(withSuccess());

        mockMvc.perform(get("/go")).andExpect(status().isOk());
    }
}

1 Ответ

0 голосов
/ 07 июля 2018
  1. Во-первых, вы должны @Autowired ваш RestTemplate боб для вашего теста учебный класс.
  2. Затем создайте MockRestServiceServer с шаблоном restTemplate вместо автопроводка это.

Возможно, попробуйте это:

@Autowired
private RestTemplate restTemplate;

private MockRestServiceServer mockRestServiceServer;

@Before
public void setup() {
    mockRestServiceServer= MockRestServiceServer.createServer(restTemplate);
}
...