| 註解 | 作用 |
@RunWith(SpringJUnit4ClassRunner.class) | 啟用 Spring TestContext (JUnit 4) |
@ContextConfiguration(locations={...}) | 指定 Spring 配置文件/類 |
@Autowired / @Resource | 注入被測服務/DAO |
@Transactional | 測試方法運行在事務中,默認回滾 |
@Rollback(false) | 強制提交事務 (慎用) |
@BeforeTransaction / @AfterTransaction | 事務邊界前後鉤子 |
@Sql / @SqlGroup | 執行腳本準備/清理數據 (Spring 4.1+) |
實戰範例:測試 UserService.handleUserLogin()
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/applicationContext-test.xml")
@Transactional // 類級別事務,所有方法默認回滾
public class UserServiceTest {
@Autowired UserService userService;
@Autowired UserDao userDao;
@Test
public void testHandleUserLogin() {
User user = new User(1L, "test", 0, "127.0.0.1", new Date());
userService.handleUserLogin(user); // 內部更新積分、寫日志
// 同事務驗證數據庫狀態
User updated = userDao.get(1L);
assertEquals(5, updated.getCredits());
// 測試結束自動回滾,數據庫無痕
}
}
最佳實踐建議
- 測試配置獨立 (
applicationContext-test.xml):內存數據庫 (H2/HSQLDB)、關閉定時任務、Mock 外部服務。
- 類級
@Transactional + 方法級 @Rollback(false) 靈活控制。
- 複雜場景使用
@Sql 執行準備腳本,或 DBUnit 載入數據集。
- 集成測試與單元測試分離 (Maven
failsafe-plugin vs surefire-plugin)。
版本演進提示
Spring 2.5 奠基註解測試;
Spring 3.2+ 引入 SpringRunner、@ActiveProfiles、@DirtiesContext;
Spring Boot 1.4+ 提供 @SpringBootTest、@DataJpaTest、@MockBean 等**切片測試**註解,更精準、更快。現代項目請直接使用 Spring Boot Test。
- 上一篇文章: Groovy 技巧:字符串操作像 List 一樣簡單 (下標、切片、運算符重載)
- 下一篇文章: Java 遊戲《Peace Maker》:在中東衝突中尋找和平平衡
Copyright ©
程式碼之家 All Rights Reserved