2012-08-02 100 views
12

我使用Spring 3.1.0.RELEASE,JUnit 4.8.1,並最終將我的應用程序部署到JBoss 4.2服務器(我知道,我知道)。如設置我的單元測試的一部分,我有這個在我的春節,測試應用程序上下文...如何在JUnit測試中(容器外部)模擬TransactionManager?

<bean id="transactionManager" 
    class="org.springframework.transaction.jta.JtaTransactionManager"> 
     <property name="userTransactionName"> 
     <value>UserTransaction</value> 
    </property> 
</bean> 

當然,現在這種失敗,因爲沒有什麼綁定到JNDI名,「UserTransaction的。」我如何模擬交易管理器?我使用的是org.mockejb框架,但是對任何合適的模擬框架都是開放的。

回答

12

我們只需創建事務管理器的空implementaion,並確保這個實現是通過單元測試

package sample; 

import org.springframework.stereotype.Service; 
import org.springframework.transaction.PlatformTransactionManager; 
import org.springframework.transaction.TransactionDefinition; 
import org.springframework.transaction.TransactionException; 
import org.springframework.transaction.TransactionStatus; 

public class MockedTransactionManager implements PlatformTransactionManager { 

    @Override 
    public TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException { 
     return null; 
    } 

    @Override 
    public void commit(TransactionStatus status) throws TransactionException { 

    } 

    @Override 
    public void rollback(TransactionStatus status) throws TransactionException { 

    } 

} 

使用的彈簧上下文中使用..和春天的XML文件,然後長相like ..

<bean id="transactionManager" class="sample.MockedTransactionManager"/>