Bird
Raised Fist0
Spring Bootframework~10 mins

MockMvc for HTTP assertions in Spring Boot - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - MockMvc for HTTP assertions
Setup MockMvc with WebApplicationContext
↓
Build HTTP request (GET/POST/etc)
↓
Perform request with MockMvc
↓
Receive MockHttpServletResponse
↓
Assert status, headers, body content
↓
Test passes or fails based on assertions
MockMvc simulates HTTP requests to Spring controllers and lets you check the response without running a server.
Execution Sample
Spring Boot
mockMvc.perform(get("/hello"))
       .andExpect(status().isOk())
       .andExpect(content().string("Hello World"));
This code sends a GET request to /hello and checks if the response status is 200 OK and the body is 'Hello World'.
Execution Table
StepActionRequest DetailsResponse StatusResponse BodyAssertion Result
1Build GET requestGET /hello--Request ready
2Perform requestSend GET /hello200Hello WorldResponse received
3Assert statusExpect 200 OK200Hello WorldPass
4Assert contentExpect body 'Hello World'200Hello WorldPass
5Test result-200Hello WorldTest passes
💡 All assertions passed, test completes successfully
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
mockMvcinitializedinitializedinitializedinitializedinitializedinitialized
requestnullGET /helloGET /helloGET /helloGET /helloGET /hello
responseStatusnullnull200200200200
responseBodynullnullHello WorldHello WorldHello WorldHello World
assertionsnonenonenonestatus OK passedcontent passedall passed
Key Moments - 3 Insights
Why do we not need to start a real server to test HTTP requests?
MockMvc simulates HTTP requests inside the test environment, so no real server is needed. See execution_table step 2 where the request is performed but no actual network call happens.
What happens if the response status is not what we expect?
The assertion in execution_table step 3 would fail, causing the test to fail immediately, preventing further assertions.
Can we test POST requests with MockMvc the same way?
Yes, you build a POST request instead of GET in step 1 and perform it similarly. The flow remains the same.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the response status after performing the request?
A500
B404
C200
Dnull
💡 Hint
Check the 'Response Status' column at step 2 in the execution_table.
At which step does the test confirm the response body content?
AStep 4
BStep 3
CStep 2
DStep 5
💡 Hint
Look at the 'Action' and 'Assertion Result' columns in execution_table for step 4.
If the response body was 'Hello Spring' instead of 'Hello World', what would happen at step 4?
AAssertion passes
BAssertion fails
CTest skips this step
DResponse status changes
💡 Hint
Step 4 asserts the exact response body string; a mismatch causes failure.
Concept Snapshot
MockMvc lets you test Spring MVC controllers without a server.
Build a request (GET, POST, etc) with mockMvc.perform().
Check response status and content with andExpect().
Assertions fail test if response differs.
Fast, isolated HTTP testing inside your test code.
Full Transcript
MockMvc is a tool in Spring Boot that lets you simulate HTTP requests to your controllers without starting a real server. You create a request like GET or POST using mockMvc.perform(), then check the response status and body using assertions like andExpect(status().isOk()) and andExpect(content().string(...)). The execution flow starts by building the request, performing it, receiving a mock response, and then asserting expected results. If any assertion fails, the test fails immediately. This allows fast and reliable testing of your web layer in isolation.

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