1.AbstractTransactionalJUnit4SpringContextTests 和AbstractJUnit4SpringContextTests。我們在測試用例類要繼承兩種中的一個。
AbstractTransactionalJUnit4SpringContextTests提供了數據庫自動回滾,也就是說測試前和測試后數據庫是一樣的
AbstractJUnit4SpringContextTests不提供數據庫自動回滾,測試會破壞數據庫。
查看源碼發現,AbstractTransactionalJUnit4SpringContextTests就是繼承自AbstractJUnit4SpringContextTests,同時類上面多了兩個Annotation:@TestExecutionListeners(TransactionalTestExecutionListener.class) 和@Transactional。所以實現數據庫回滾有兩種方法,如下:
public class BasicTest extends AbstractTransactionalJUnit4SpringContextTests {}
和
@TestExecutionListeners(TransactionalTestExecutionListener.class) @Transactional public class BasicTest extends AbstractJUnit4SpringContextTests { }
好吧,說了這么多沒用的還不如直接上代碼
為了避免每個測試用例都要配置spring環境,先建立一個父類:BasicTest,內容很簡單,真的很簡單:
@ContextConfiguration(locations= {"classpath:spring/applicationContext.xml","classpath:spring/spring-servlet.xml"}) public class BasicTest extends AbstractTransactionalJUnit4SpringContextTests { }
@ContextConfiguration:顧名思義就是配置context配置文件的地址,我這里是Web程序,所以還要spring-servlet.xml。
網上的例子都有@RunWith注解,但是我發現 AbstractJUnit4SpringContextTests 類上已經有了@RunWith,那么這里就不需要了。只要配置@ContextConfiguration就可以了
然后測試用例繼承BasicTest如下: 具體的測試方法怎么寫就不用說了。
public class PeopleServiceTest extends BasicTest{ @Resource(name="PeopleService") private PeopleService ps; @Test public void queryAll() { List<People> list=ps.queryAll(null); System.out.println(list); Assert.assertEquals("list沒有10個", 10, list.size()); } @Test public void update() { People p=new People().set("id", 29).set("name", "tom").set("address", "").set("age", 10); Assert.assertEquals("沒有修改", 1, this.ps.update(p)); } @Test public void insert() { People p=new People().set("name", "Mike").set("address", "america").set("age", 10); Assert.assertEquals("沒有插入", 1, this.ps.add(p)); } }