MockMvc ContentType is undefined in Result Action

Viewed 52

I am working with Spring 2.7 & JUnit 5 on Eclipse and I have been trying to write a test statement for creating a product. Unfortunately, I am not sure what import statement I am missing (or not sure what is wrong with my statement.

I have these import statements currently:

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import java.util.List;
import java.util.Arrays;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.mock.web.MockHttpServletRequest;

These are the annotations I have on my test class:

@RunWith(SpringRunner.class)
@WebMvcTest
class RestControllerMvcTests {

and here is the specific test I have had an error with:

    @Test
    public void testCreateProduct() throws JsonProcessingException, Exception{
        Product product = buildProduct(); //Function for a new product with test values
        when(repo.save(any())).thenReturn(product);
        ObjectWriter objwrite = new ObjectMapper().writer().withDefaultPrettyPrinter();
        
        mockMvc.perform(get(PRODUCT_URL).contextPath(CONTEXT_URL))  
        .contentType(MediaType.APPLICATION_JSON) //the line that gives me an error
        .content(objwrite.writeValueAsString(product))
        .andExpect(status().isOk());
    }

Overall, I tried importing different libraries without success and adding cast to the method. Adding cast instead created an error with .andExpect() so I would appreciate help on that if that is the solution I would use.

1 Answers

Be more careful with parentheses)

The contentType() and content() methods also refer to get().

@Test
    public void testCreateProduct() throws JsonProcessingException, Exception{
        Product product = buildProduct();
        when(repo.save(any())).thenReturn(product);
        ObjectWriter objwrite = new ObjectMapper().writer().withDefaultPrettyPrinter();
        
        mockMvc.perform( get(PRODUCT_URL)
                .contextPath(CONTEXT_URL)
                .contentType(MediaType.APPLICATION_JSON)
                .content(objwrite.writeValueAsString(product)) )
        .andExpect(status().isOk());
    }
Related