如何在JUnit测试中(容器外部)模拟TransactionManager?

问题描述:

我使用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框架,但是对任何合适的模拟框架都是开放的。

我们只需创建事务管理器的空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"/>