Spring環境下使用TestNG進行單元測試及出現的各種問題
阿新 • • 發佈:2019-01-29
今天在用Spring整合MyBatis後,在使用單元測試時發現了一些坑
package com.germa.service; import com.germa.domain.Forum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests; import org.testng.annotations.Test; @ContextConfiguration("classpath:applicationContext-mybatis.xml") @Rollback(false) public class TestMyBatis extends AbstractTransactionalTestNGSpringContextTests { private ForumService forumService; @Autowired public void setForumService(ForumService forumService) { this.forumService = forumService; } @Test public void testAddForum(){ //ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:applicationContext-mybatis.xml"); // this.forumService=(ForumService)ctx.getBean("forumService"); Forum forum=new Forum(); forum.setForumId(3); forum.setForumName("forum3"); forum.setForumDesc("Desc3"); this.forumService.addForum(forum); } }
第一個坑:在一開始測試時我直接新建一個測試類,並給類註解@ContextConfiguration("classpath:applicationContext-mybatis.xml"),想通過註解自動載入配置檔案,然後在直接在想要測試的方法前加了testng的@Test,一執行,報錯NullPointerException,然後我試了在方法內部用ApplicationContext手動載入,結果就可以了,發現是想要的Bean沒有被自動注入,網上查了一下,原來在測試類想要融入Spring環境下(註解自動載入配置檔案),必須extends 一個叫AbstractTransactionalTestNGSpringContextTests的類,此時,問題得以解決。
第二個坑:方法成功執行,結果卻在資料庫看不到相應的結果,困頓許久,看了下測試產生的資訊,原來是繼承AbstractTransactionalTestNGSpringContextTests在測試時會自動啟動事務,自動回滾,這時,只需要給測試類註解@RollBack(false)即可。
後續有坑再補