Bird
Raised Fist0
Spring Bootframework~5 mins

@SpringBootTest for integration tests - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the @SpringBootTest annotation in Spring Boot?

@SpringBootTest tells Spring Boot to start the full application context for integration testing. It helps test how different parts of the app work together.

Click to reveal answer
intermediate
How does @SpringBootTest differ from unit testing annotations like @WebMvcTest?

@SpringBootTest loads the entire application context, while @WebMvcTest loads only web layer components for focused controller tests.

Click to reveal answer
intermediate
What does the webEnvironment attribute in @SpringBootTest control?

It controls how the embedded web server starts during tests. Options include MOCK (no real server), RANDOM_PORT, DEFINED_PORT, or NONE.

Click to reveal answer
beginner
Why is @SpringBootTest considered slower than unit tests?

Because it loads the full Spring application context, which takes more time than loading only small parts for unit tests.

Click to reveal answer
intermediate
How can you use @SpringBootTest to run tests with a random port?

Use @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) to start the server on a random port for real HTTP testing.

Click to reveal answer
What does @SpringBootTest do in a test class?
ALoads the full Spring application context for integration testing
BMocks only the web layer components
CRuns unit tests without Spring context
DStarts a database server
Which webEnvironment option starts a real server on a random port?
AMOCK
BRANDOM_PORT
CNONE
DDEFINED_PORT
Why might @SpringBootTest tests run slower than unit tests?
ABecause they load the full application context
BBecause they use more CPU
CBecause they skip database setup
DBecause they don't use Spring
Which annotation is better for testing only Spring MVC controllers?
A@DataJpaTest
B@SpringBootTest
C@WebMvcTest
D@MockBean
Can @SpringBootTest be used to test database integration?
AOnly if combined with @DataJpaTest
BNo, it only tests web controllers
CNo, it mocks database calls
DYes, because it loads full context including database beans
Explain what @SpringBootTest does and when you would use it.
Think about testing the whole app, not just one part.
You got /4 concepts.
    Describe the difference between @SpringBootTest and @WebMvcTest.
    One tests everything, the other tests only controllers.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using @SpringBootTest in a Spring Boot project?
      easy
      A. To configure database connections only
      B. To mock all dependencies automatically
      C. To run unit tests without loading Spring context
      D. To load the full application context for integration testing

      Solution

      1. Step 1: Understand what @SpringBootTest does

        This annotation loads the entire Spring Boot application context, allowing tests to run with all beans and configurations loaded.
      2. Step 2: Compare with other testing annotations

        Unlike unit tests or mocks, @SpringBootTest is used for integration tests that need the full app context.
      3. Final Answer:

        To load the full application context for integration testing -> Option D
      4. Quick Check:

        @SpringBootTest = full app context load [OK]
      Hint: Remember: @SpringBootTest loads full app context for integration [OK]
      Common Mistakes:
      • Thinking it mocks all dependencies automatically
      • Confusing it with unit test annotations
      • Assuming it only configures database connections
      2. Which of the following is the correct way to use @SpringBootTest to start the web environment on a random port?
      easy
      A. @SpringBootTest(webEnv = RANDOM_PORT)
      B. @SpringBootTest(webEnvironment = "random")
      C. @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
      D. @SpringBootTest(port = RANDOM_PORT)

      Solution

      1. Step 1: Recall the correct attribute name and value

        The attribute to set the web environment is webEnvironment, and the enum value for random port is WebEnvironment.RANDOM_PORT.
      2. Step 2: Check syntax correctness

        @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) uses the correct attribute and enum syntax. Other options use incorrect attribute names or string values.
      3. Final Answer:

        @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) -> Option C
      4. Quick Check:

        Correct attribute and enum = @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) [OK]
      Hint: Use webEnvironment = WebEnvironment.RANDOM_PORT exactly [OK]
      Common Mistakes:
      • Using wrong attribute name like webEnv
      • Passing string instead of enum
      • Trying to set port directly in annotation
      3. Given the following test class snippet, what will be the output when running the test?
      \@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
      class MyIntegrationTest {
        \@Autowired
        private TestRestTemplate restTemplate;
      
        \@Test
        void testHelloEndpoint() {
          String response = restTemplate.getForObject("/hello", String.class);
          System.out.println(response);
        }
      }

      Assuming the /hello endpoint returns "Hello, Spring!".
      medium
      A. Hello, Spring!
      B. null
      C. 404 Not Found error
      D. Test fails with context load error

      Solution

      1. Step 1: Understand the test setup

        The test uses @SpringBootTest with RANDOM_PORT and injects TestRestTemplate, which allows calling the real HTTP endpoint.
      2. Step 2: Predict the endpoint call result

        The /hello endpoint returns "Hello, Spring!" so the call will return this string and print it.
      3. Final Answer:

        Hello, Spring! -> Option A
      4. Quick Check:

        TestRestTemplate calls real endpoint = "Hello, Spring!" [OK]
      Hint: TestRestTemplate calls real endpoint in @SpringBootTest [OK]
      Common Mistakes:
      • Expecting null because of missing mocks
      • Assuming 404 because of wrong port
      • Thinking context fails to load
      4. You wrote this test but it fails with a NoSuchBeanDefinitionException for TestRestTemplate. What is the likely cause?
      \@SpringBootTest
      class MyTest {
        \@Autowired
        private TestRestTemplate restTemplate;
      
        \@Test
        void test() {
          // test code
        }
      }
      medium
      A. TestRestTemplate is not a Spring bean
      B. Missing webEnvironment setting to start web server
      C. Forgot to add @Autowired annotation
      D. Test class must be public

      Solution

      1. Step 1: Identify why TestRestTemplate bean is missing

        By default, @SpringBootTest does not start the web server unless webEnvironment is set, so TestRestTemplate bean is not created.
      2. Step 2: Fix by adding webEnvironment

        Adding webEnvironment = WebEnvironment.RANDOM_PORT or DEFINED_PORT starts the server and creates the bean.
      3. Final Answer:

        Missing webEnvironment setting to start web server -> Option B
      4. Quick Check:

        webEnvironment needed for TestRestTemplate bean [OK]
      Hint: Add webEnvironment to enable TestRestTemplate bean [OK]
      Common Mistakes:
      • Assuming TestRestTemplate is always available
      • Forgetting to set webEnvironment in @SpringBootTest
      • Thinking @Autowired is missing
      5. You want to write an integration test that loads the full Spring Boot context but disables the web server startup to speed up tests. Which @SpringBootTest configuration should you use?
      hard
      A. @SpringBootTest(webEnvironment = WebEnvironment.NONE)
      B. @SpringBootTest(webEnvironment = WebEnvironment.MOCK)
      C. @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
      D. @SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT)

      Solution

      1. Step 1: Understand webEnvironment options

        WebEnvironment.NONE disables web server startup but loads full context. MOCK uses mock servlet environment, RANDOM_PORT and DEFINED_PORT start real servers.
      2. Step 2: Choose option that disables web server

        To speed up tests without web server, use WebEnvironment.NONE.
      3. Final Answer:

        @SpringBootTest(webEnvironment = WebEnvironment.NONE) -> Option A
      4. Quick Check:

        Disable web server with WebEnvironment.NONE [OK]
      Hint: Use WebEnvironment.NONE to skip web server startup [OK]
      Common Mistakes:
      • Using MOCK which still sets up servlet environment
      • Starting real server with RANDOM_PORT or DEFINED_PORT
      • Confusing NONE with MOCK
      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