junit4和spring test測試之AbstractTransactionalJUnit4SpringContextTests詳解


使用Spring TestContext Framework對程序進行單元測試有兩種方式,一種是測試類繼承AbstractJUnit4SpringContextTests或繼承AbstractTransactionalJUnit4SpringContextTests,並且使用@ContextConfiguration注解來指定配置文件的位置,如果不置頂配置文件的位置的話,它會默認測試目標類的全限名加上"-context.xml"(eg: com.sch.services.UserService默認的配置文件為:classpath:com/sch/services/UserService-context.xml). 
先來看一下AbstractJUnit4SpringContextTests和AbstractTransactionalJUnit4SpringContextTests的原型,了解兩者的區別: 
AbstractJUnit4SpringContextTests: 

Java代碼  
@RunWith(SpringJUnit4ClassRunner.class) //指定測試用例運行器  
 @TestExecutionListeners(                 // 注冊了兩個TestExecutionListener監聽器  
  { DependencyInjectionTestExecutionListener.class,  
    DirtiesContextTestExecutionListener.class })  
 public class AbstractJUnit4SpringContextTests implements ApplicationContextAware {  
    …  
  }  

 

AbstractTransactionalJUnit4SpringContextTests: 

Java代碼  
// 注冊測試用例事務管理的監聽器  
  @TestExecutionListeners( { TransactionalTestExecutionListener.class })  
  @Transactional    // 使測試用例的所有方法都將工作於事務環境下  
  public class AbstractTransactionalJUnit4SpringContextTests   
  extends AbstractJUnit4SpringContextTests {  
    …  
  }  


可以看出AbstractTransactionalJUnit4SpringContextTests 是繼承於AbstractJUnit4SpringContextTests 並增加了一個TransactionalTestExecutionListener監聽器,可見AbstractTransactionalJUnit4SpringContextTests 增加了測試類對事物的控制,可見測試類可以使用注解也可以使用繼承抽象類。 

接下來看一下3個監聽器的作用: 

DependencyInjectionTestExecutionListener提供了依賴注入的功能,它負責解析測試類中的@Autowried和@Resource注解 

DirtiesContextTestExecutionListener只要的作用是處理測試類中的上下文遭到破壞時,重新注冊上下文,即在測試方法上使用@DirtiesContext啟用;當測試方法被@DirtiesContext注解修飾時,當測試方法結束的時候,Spring TestContext會刷新Spring的上下文(就是重新創建ApplicationContext)。 

TransactionalTestExecutionListener主要負責解析和事物操作有關的注解,例如:@Transaction、@BeforeTransaction、@AfterTransaction、@NotTransactional 以及 @Rollback。 

下面來看一下測試相關注解的簡單說明: 
@TransactionConfiguration使用在類級別上,里面有兩個屬性,transactionManager 指定事物管理器的名字,默認的名稱為:transactionManager;defaultRollback 配置全局默認的事務回滾,默認為:false。 

@BeforeTransaction和@AfterTransaction可見是在需要事物的測試方法執行前后調用,和JUnit4中@Before、@After注解類型,當時前者會忽略聲明了@NotTransactional注解的測試方法。 

@NotTransactional修飾那些不需要事物的測試方法。 

@Rollback可以改變測試方法的回滾方式,例如@Rollback(true)可以是測試方法的事物設置為執行完后事物馬上回滾。 
還有一些注解的使用方法可以參考Spring Reference。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM