Injecter de la maquette du Printemps MockMvc WebApplicationContext

Je suis en train de tester (via JUnit4 et le Printemps MockMvc) un service REST de l'adaptateur à l'aide de Spring-boot. La carte passe simplement le long des demandes qui lui sont faites, à un autre service REST (à l'aide d'un custom RestTemplate) et ajoute des données supplémentaires pour les réponses.

Je voudrais MockMvc tests à effectuer contrôleur de tests d'intégration, mais de vouloir remplacer les RestTemplate dans le contrôleur avec un simulacre de me permettre de prédéfinir la 3ème partie RESTE de la réponse et de l'empêcher d'être frappé au cours de chaque essai. J'ai été en mesure d'accomplir par l'instanciation d'un MockMvcBuilders.standAloneSetup() et de le transmettre au contrôleur d'être testé avec la maquette injecté énumérés dans ce post (et ma configuration ci-dessous), mais je ne suis pas capable de faire la même chose en utilisant MockMvcBuilders.webAppContextSetup().

J'ai été par le biais de quelques posts, aucune de répondre à la question de savoir comment cela pourrait se faire. Je voudrais utiliser le Printemps contexte de l'application pour les tests, plutôt que de autonome pour empêcher tout lacunes de l'application est susceptible de croître.

EDIT: je suis en utilisant Mockito comme se moquant de mon cadre et j'essaie d'injecter de l'un de ses simulacres dans le contexte. Si ce n'est pas nécessaire, d'autant mieux.

Contrôleur:

@RestController
@RequestMapping(Constants.REQUEST_MAPPING_PATH)
public class Controller{

    @Autowired
    private DataProvider dp;    

    @Autowired
    private RestTemplate template;

    @RequestMapping(value = Constants.REQUEST_MAPPING_RESOURCE, method = RequestMethod.GET)
    public Response getResponse(
            @RequestParam(required = true) String data,
            @RequestParam(required = false, defaultValue = "80") String minScore
            ) throws Exception {

        Response resp = new Response();

        //Set the request params from the client request
        Map<String, String> parameters = new HashMap<String, String>();
        parameters.put(Constants.PARAM_DATA, data);
        parameters.put(Constants.PARAM_FORMAT, Constants.PARAMS_FORMAT.JSON);

        resp = template.getForObject(Constants.RESTDATAPROVIDER_URL, Response.class, parameters);

        if(resp.getError() == null){
            resp.filterScoreLessThan(new BigDecimal(minScore));
            new DataHandler(dp).populateData(resp.getData());
        }
        return resp;
    }
}

De la classe de Test:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@SpringApplicationConfiguration(classes = MainSpringBootAdapter.class)
@TestPropertySource("/application-junit.properties")
public class WacControllerTest {
private static String controllerURL = Constants.REQUEST_MAPPING_PATH + Constants.REQUEST_MAPPING_RESOURCE + compressedParams_all;
private static String compressedParams_all = "?data={data}&minScore={minScore}";
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@InjectMocks
private Controller Controller;
@Mock
private RestTemplate rt;
@Value("${file}")
private String file;
@Spy
private DataProvider dp;
@Before
public void setup() throws Exception {
dp = new DataProvider(file);    
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
}
@Test
public void testGetResponse() throws Exception {
String[] strings = {"requestData", "100"};
Mockito.when(
rt.getForObject(Mockito.<String> any(), Mockito.<Class<Object>> any(), Mockito.<Map<String, ?>> any()))
.thenReturn(populateTestResponse());
mockMvc.perform(get(controllerURL, strings)
.accept(Constants.APPLICATION_JSON_UTF8))
.andDo(MockMvcResultHandlers.print());
Mockito.verify(rt, Mockito.times(1)).getForObject(Mockito.<String> any(), Mockito.<Class<?>> any(), Mockito.<Map<String, ?>> any());
}
private Response populateTestResponse() {
Response  resp = new Response();
resp.setScore(new BigDecimal(100));
resp.setData("Some Data");
return resp;
}
}

OriginalL'auteur ethesx | 2015-08-04