เฟรมเวิร์กบริบทการทดสอบของ Spring
ทำความเข้าใจว่าเฟรมเวิร์กบริบทการทดสอบของ Spring เริ่มต้นและจัดการบริบทแอปพลิเคชันสำหรับการทดสอบการผสานรวมอย่างไร
เฟรมเวิร์กบริบทการทดสอบของ Spring เป็นบทเรียน Testing Mastery: JUnit, Mockito & Integration Tests ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Testing Mastery: JUnit, Mockito & Integration Tests และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Testing Mastery: JUnit, Mockito & Integration Tests มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
Spring Test Context Intro
Welcome to Spring Boot integration testing! When you write tests for Spring applications, you need a way to bring up a part of your application. That's where the Spring Test Context Framework comes in.
It provides the infrastructure to load and manage an ApplicationContext for your tests, ensuring they run in a Spring-aware environment. This is crucial for tests that interact with beans, services, or data layers.
The @SpringBootTest Annotation
The core of Spring Boot integration testing is the @SpringBootTest annotation. It tells JUnit to bootstrap the Spring Boot application context for your test.
- It starts a full
ApplicationContext. - It finds the main configuration class (often your
@SpringBootApplicationclass). - It provides access to all your Spring beans within the test.
Think of it as running your entire application, but specifically for your test's needs.
How Contexts Are Loaded
When @SpringBootTest is used, Spring's test framework looks for your main application class (the one annotated with @SpringBootApplication) and uses it to create an ApplicationContext.
This context is essentially a container for all the components (beans) of your application. Your test then runs against this live application context, allowing it to interact with actual services, repositories, and other Spring-managed components.
Context Caching for Speed
Loading a full Spring ApplicationContext can be slow. To speed up your test suite, the Spring Test Context Framework intelligently caches contexts.
- If multiple tests require the exact same context configuration, Spring will reuse the previously loaded context.
- This significantly reduces test execution time, especially in large projects.
- The context is only reloaded if the configuration (e.g., properties, active profiles) changes.
Basic Spring App Example
Here's a minimal Spring Boot application. When you use @SpringBootTest, the framework will load a context based on this class, making its beans available to your tests.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(MyApp.class, args);
System.out.println("App context loaded: " + (context != null));
}
}Using @SpringBootTest (Test)
Now, let's see how a test would use @SpringBootTest to load the context for the MyApp from the previous scene. We inject the ApplicationContext to verify it's loaded.
Notice this test class doesn't have a main method itself, as JUnit runners handle its execution.
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest
class MyApplicationTests {
@Test
void contextLoads(ApplicationContext context) {
assertThat(context).isNotNull();
System.out.println("ApplicationContext loaded for test!");
}
}Customizing Web Environment
For web applications, @SpringBootTest can start a web server for your tests. You control this behavior using the webEnvironment attribute:
MOCK(default): Provides a mock servlet environment.RANDOM_PORT: Starts an embedded server on a random port.DEFINED_PORT: Starts an embedded server on the default or configured port.NONE: Does not start an embedded server.
RANDOM_PORT is often preferred to avoid port conflicts.
Web Environment Example
Here's how you'd configure @SpringBootTest to start a web server on a random port. This allows you to perform actual HTTP requests against your application within your tests.
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.beans.factory.annotation.Value;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class WebAppTests {
@Value(value="${local.server.port}")
private int port;
@Test
void serverStarts() {
assertThat(port).isNotZero();
System.out.println("Web server started on port: " + port);
}
}Overriding Test Properties
Sometimes, you need specific configuration properties for your tests that differ from your main application (e.g., a test database URL). You can override these using the properties attribute in @SpringBootTest.
This allows you to isolate your test environment without changing production code.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
@SpringBootApplication
public class PropApp implements CommandLineRunner {
@Value("${app.message:Default Message}")
private String message;
public static void main(String[] args) {
SpringApplication.run(PropApp.class, args);
}
@Override
public void run(String... args) throws Exception {
System.out.println("App Message: " + message);
}
}Quick Check
Which @SpringBootTest.WebEnvironment option would you use to start an embedded web server on an available, random port?
Recap: Spring Test Context
You've learned about the Spring Test Context Framework, a powerful tool for integration testing. We covered:
- The purpose of the framework and
@SpringBootTest. - How application contexts are loaded and cached.
- Customizing test environments with
webEnvironment. - Overriding properties for test-specific configurations.
This foundation is essential for writing robust and efficient Spring Boot integration tests!
คำถามที่พบบ่อย
บทเรียน “เฟรมเวิร์กบริบทการทดสอบของ Spring” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เฟรมเวิร์กบริบทการทดสอบของ Spring” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Testing Mastery: JUnit, Mockito & Integration Tests ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Testing Mastery: JUnit, Mockito & Integration Tests มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เฟรมเวิร์กบริบทการทดสอบของ Spring”
ทำความเข้าใจว่าเฟรมเวิร์กบริบทการทดสอบของ Spring เริ่มต้นและจัดการบริบทแอปพลิเคชันสำหรับการทดสอบการผสานรวมอย่างไร คุณปฏิบัติ Testing Mastery: JUnit, Mockito & Integration Tests ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Testing Mastery: JUnit, Mockito & Integration Tests หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Testing Mastery: JUnit, Mockito & Integration Tests บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “เฟรมเวิร์กบริบทการทดสอบของ Spring” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Testing Mastery: JUnit, Mockito & Integration Tests นี้ได้ไหม
ได้ บทเรียน Testing Mastery: JUnit, Mockito & Integration Tests ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เฟรมเวิร์กบริบทการทดสอบของ Spring
- การทดสอบ API แบบ RESTful
- ฐานข้อมูลฝังตัวสำหรับการทดสอบ
- การทดสอบชั้นเว็บด้วย @WebMvcTest และ MockMvc