Bird
Raised Fist0
Spring Bootframework~30 mins

MockMvc for HTTP assertions in Spring Boot - Mini Project: Build & Apply

Choose your learning style10 modes available
MockMvc for HTTP assertions
📖 Scenario: You are building a simple Spring Boot web application that has a REST endpoint to greet users by name.To ensure your endpoint works correctly, you want to write tests that simulate HTTP requests and check the responses without starting the full server.
🎯 Goal: Create a test class using MockMvc to send a GET request to the greeting endpoint and assert the HTTP status and response content.
📋 What You'll Learn
Create a Spring Boot REST controller with a GET endpoint /greet that accepts a name query parameter and returns a greeting message.
Set up a MockMvc instance in the test class.
Write a test method that performs a GET request to /greet?name=Alice using MockMvc.
Assert that the HTTP status is 200 (OK) and the response body contains the greeting message Hello, Alice!.
💡 Why This Matters
🌍 Real World
MockMvc is used in Spring Boot projects to test web controllers quickly and reliably without deploying the full application server.
💼 Career
Understanding MockMvc is essential for backend developers working with Spring Boot to write automated tests that ensure web endpoints behave as expected.
Progress0 / 4 steps
1
Create the GreetingController REST endpoint
Create a Spring Boot REST controller class called GreetingController with a GET mapping for /greet that accepts a name query parameter and returns the string "Hello, " + name + "!".
Spring Boot
Hint

Use @RestController and @GetMapping annotations. The method should take a @RequestParam String name and return the greeting string.

2
Set up MockMvc in the test class
Create a test class called GreetingControllerTest annotated with @WebMvcTest(GreetingController.class). Inject a MockMvc field using @Autowired.
Spring Boot
Hint

Use @WebMvcTest on the test class and @Autowired to inject MockMvc.

3
Write a test method to perform GET request and assert response
In GreetingControllerTest, write a test method called testGreetReturnsHelloMessage annotated with @Test. Use mockMvc.perform to send a GET request to /greet?name=Alice. Assert that the status is 200 and the response content is exactly Hello, Alice!.
Spring Boot
Hint

Use mockMvc.perform(get(...)) and chain andExpect calls for status and content.

4
Add @AutoConfigureMockMvc annotation to enable MockMvc auto-configuration
In the GreetingControllerTest class, add the annotation @AutoConfigureMockMvc above the class declaration to enable automatic MockMvc configuration.
Spring Boot
Hint

Add @AutoConfigureMockMvc above the test class to enable MockMvc auto-configuration.

Practice

(1/5)
1. What is the main purpose of using MockMvc in Spring Boot tests?
easy
A. To test HTTP requests and responses without starting a real server
B. To deploy the application to a production server
C. To generate HTML pages automatically
D. To manage database connections

Solution

  1. Step 1: Understand MockMvc role

    MockMvc simulates HTTP requests and responses in tests without needing a real server.
  2. Step 2: Compare options

    Options A, B, and D describe unrelated tasks like HTML generation, deployment, or database management.
  3. Final Answer:

    To test HTTP requests and responses without starting a real server -> Option A
  4. Quick Check:

    MockMvc = HTTP testing without server [OK]
Hint: MockMvc tests HTTP calls without running the server [OK]
Common Mistakes:
  • Thinking MockMvc starts a real server
  • Confusing MockMvc with deployment tools
  • Assuming MockMvc manages databases
2. Which of the following is the correct way to perform a GET request using MockMvc?
easy
A. mockMvc.perform(get("/api/data"))
B. mockMvc.get("/api/data")
C. mockMvc.request("GET", "/api/data")
D. mockMvc.callGet("/api/data")

Solution

  1. Step 1: Recall MockMvc syntax

    The correct syntax uses mockMvc.perform(get("/url")) with static import of get.
  2. Step 2: Check other options

    Options B, C, and D use invalid method names not provided by MockMvc API.
  3. Final Answer:

    mockMvc.perform(get("/api/data")) -> Option A
  4. Quick Check:

    Use perform(get()) for GET requests [OK]
Hint: Use perform(get("url")) to send GET requests [OK]
Common Mistakes:
  • Using mockMvc.get() directly
  • Confusing method names like request() or callGet()
  • Not importing static get() method
3. Given the following test snippet, what HTTP status code will be asserted?
mockMvc.perform(get("/hello"))
       .andExpect(status().isOk());
medium
A. 404 Not Found
B. 500 Internal Server Error
C. 200 OK
D. 302 Redirect

Solution

  1. Step 1: Understand status().isOk()

    The method status().isOk() checks for HTTP status code 200.
  2. Step 2: Match status codes

    200 means success, 404 means not found, 500 means server error, 302 means redirect.
  3. Final Answer:

    200 OK -> Option C
  4. Quick Check:

    status().isOk() = 200 OK [OK]
Hint: isOk() always means HTTP 200 success [OK]
Common Mistakes:
  • Confusing isOk() with error codes
  • Assuming isOk() means redirect
  • Mixing status codes meanings
4. Identify the error in this MockMvc test code snippet:
mockMvc.perform(post("/submit"))
       .andExpect(status().isOk)
       .andExpect(content().string("Success"));
medium
A. Using post instead of get for /submit
B. Missing parentheses after isOk method call
C. Incorrect content matcher method name
D. No error, code is correct

Solution

  1. Step 1: Check method calls

    The method isOk must be called with parentheses: isOk().
  2. Step 2: Verify other parts

    Using post for /submit is valid; content().string() is correct; so no other errors.
  3. Final Answer:

    Missing parentheses after isOk method call -> Option B
  4. Quick Check:

    Method calls need parentheses like isOk() [OK]
Hint: Always add () after status check methods like isOk() [OK]
Common Mistakes:
  • Forgetting parentheses on isOk()
  • Confusing post and get methods
  • Using wrong content matcher method
5. You want to test a JSON response from /user/1 endpoint that returns {"name":"Alice","age":30}. Which MockMvc assertion correctly checks the name field in the JSON response?
hard
A. andExpect(content().string("Alice"))
B. andExpect(content().json("name: Alice"))
C. andExpect(jsonPath("name").isEqualTo("Alice"))
D. andExpect(jsonPath("$.name").value("Alice"))

Solution

  1. Step 1: Understand JSON path syntax

    To check JSON fields, use jsonPath("$.fieldName") with value() for expected value.
  2. Step 2: Evaluate options

    andExpect(jsonPath("$.name").value("Alice")) uses correct syntax. andExpect(content().json("name: Alice")) has invalid JSON format. andExpect(jsonPath("name").isEqualTo("Alice")) uses wrong jsonPath syntax. andExpect(content().string("Alice")) checks whole string, not JSON field.
  3. Final Answer:

    andExpect(jsonPath("$.name").value("Alice")) -> Option D
  4. Quick Check:

    Use jsonPath("$.field").value() for JSON checks [OK]
Hint: Use jsonPath("$.field").value(expected) to check JSON fields [OK]
Common Mistakes:
  • Wrong jsonPath syntax without $
  • Trying to match JSON with plain string
  • Using incorrect matcher methods
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard