運行JUnit測試時拋出`initializationError`,通常伴隨堆疊信息指向測試類初始化階段。
| 錯誤特徵 | 根因 | 解決方案 |
|---|---|---|
| 無參構造函數缺失 | 實體類/測試類缺少public無參構造器 | 添加`public User() {}`或使用Lombok `@NoArgsConstructor` |
| SessionFactory創建失敗 | hibernate.cfg.xml配置錯誤/映射文件缺失 | 檢查數據庫連接、驅動類、映射資源路徑 |
| 事務管理缺失 | @Transactional未生效/未配置事務管理器 | Spring配置` |
| 類路徑資源找不到 | src/test/resources未標記為Test Resources Root | IDEA:右鍵目錄 → Mark Directory as → Test Resources Root |
| 版本衝突 | Hibernate 5.x vs 6.x、JUnit 4 vs 5 API不兼容 | 統一版本,JUnit 5用`@BeforeEach`替代`@Before` |
@SpringBootTest
@TestPropertySource(locations = "classpath:application-test.yml")
class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Autowired
private TestEntityManager entityManager;
@Test
@Transactional
@Rollback // 測試後自動回滾
void testSaveUser() {
User user = new User("test", "pass");
User saved = userRepository.save(user);
assertNotNull(saved.getId());
}
}
`initializationError`只是冰山一角,**完整堆疊信息的 `Caused by` 鏈才是藏寶圖**。養成「先看最底層Caused by」的習慣,配合Spring Boot測試切片,讓Hibernate測試不再崩潰。