Подтвердить что ты не робот

Как мне высмеять TransactionManager в тесте JUnit (вне контейнера)?

Я использую Spring 3.1.0.RELEASE, JUnit 4.8.1 и в конечном итоге развертываю свое приложение на сервере JBoss 4.2 (знаю, я знаю). В рамках настройки моего unit test у меня есть это в моем тестовом приложении Spring...

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

Конечно, сейчас это терпит неудачу, потому что нет ничего связанного с именем JNDI, "UserTransaction". Как мне высмеять менеджера транзакций? Я использую структуру org.mockejb, но открытую для любых подходящих фальсифицированных фреймворков.

4b9b3361

Ответ 1

Мы просто создаем пустую реализацию для диспетчера транзакций и гарантируем, что эта реализация используется в spring -контексте, используемом unit test

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"/>