복붙노트

[SPRING] JUnit 테스트 (컨테이너 외부)에서 TransactionManager를 조롱하려면 어떻게해야합니까?

SPRING

JUnit 테스트 (컨테이너 외부)에서 TransactionManager를 조롱하려면 어떻게해야합니까?

Spring 3.1.0.RELEASE, JUnit 4.8.1을 사용하고 궁극적으로 내 애플리케이션을 JBoss 4.2 서버에 배포하고 있습니다. 내 단위 테스트 설정의 일환으로, 내 봄 테스트 응용 프로그램 컨텍스트 에서이 ...

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

물론, JNDI 이름 인 "UserTransaction"에 바인딩 된 것이 없기 때문에 지금은 실패합니다. 트랜잭션 관리자를 어떻게 조롱합니까? org.mockejb 프레임 워크를 사용하고 있지만 적절한 프레임 워크를 열어 두었습니다.

해결법

  1. ==============================

    1.우리는 단순히 트랜잭션 관리자를위한 빈 구현을 생성하고이 구현이 단위 테스트에서 사용되는 스프링 컨텍스트에서 사용되는지 확인합니다

    우리는 단순히 트랜잭션 관리자를위한 빈 구현을 생성하고이 구현이 단위 테스트에서 사용되는 스프링 컨텍스트에서 사용되는지 확인합니다

    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"/>
    
  2. from https://stackoverflow.com/questions/11783283/how-do-i-mock-a-transactionmanager-in-a-junit-test-outside-of-the-container by cc-by-sa and MIT license