14

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

4

3 回答 3

15

我们简单地为事务管理器创建一个空的实现,并确保在单元测试使用的 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"/>
于 2013-03-21T11:33:21.740 回答
1

您还可以使用Mockito

PlatformTransactionManager manager = mock(PlatformTransactionManager.class);
于 2020-05-27T11:29:10.050 回答
0

您可以使用PseudoTransactionManager

PlatformTransactionManager manager = new PseudoTransactionManager();
于 2021-04-12T09:06:58.293 回答