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

トランザクション マネージャー用の空の実装を作成し、この実装が単体テストで使用されるスプリング コンテキストで使用されるようにします。

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 に答える