【问题标题】:How do I mock a TransactionManager in a JUnit test, (outside of the container)?如何在 JUnit 测试中模拟 TransactionManager(在容器外)?
【发布时间】:2012-07-31 18:25:51
【问题描述】:

我正在使用 Spring 3.1.0.RELEASE、JUnit 4.8.1,并最终将我的应用程序部署到 JBoss 4.2 服务器(我知道,我知道)。作为设置我的单元测试的一部分,我在我的 Spring 测试应用程序上下文中有这个......

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

当然,现在这失败了,因为没有任何东西绑定到 JNDI 名称“UserTransaction”。如何模拟事务管理器?我正在使用 org.mockejb 框架,但对任何合适的模拟框架都是开放的。

【问题讨论】:

    标签: spring transactions junit mocking jta


    【解决方案1】:

    你可以使用PseudoTransactionManager:

    PlatformTransactionManager manager = new PseudoTransactionManager();
    

    【讨论】:

      【解决方案2】:

      你也可以使用Mockito:

      PlatformTransactionManager manager = mock(PlatformTransactionManager.class);
      

      【讨论】:

        【解决方案3】:

        我们只是为事务管理器创建一个空的实现,并确保在单元测试使用的spring-context中使用这个实现

        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 {
        
            }
        
        }
        

        .. 并且在 spring-xml 文件中看起来像..

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

        【讨论】:

          猜你喜欢
          • 2011-08-04
          • 1970-01-01
          • 2010-12-11
          • 1970-01-01
          • 2012-08-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多