2012-08-02 2 views
12

저는 Spring 3.1.0.RELEASE, JUnit 4.8.1을 사용하고 있습니다. 궁극적으로 내 애플리케이션을 JBoss 4.2 서버에 배포하고 있습니다. 내 단위 테스트를 설정하는 부분으로, 나는 JNDI 이름에 바인딩 아무것도 없기 때문에JUnit 테스트 (컨테이너 외부)에서 TransactionManager를 조롱하려면 어떻게해야합니까?

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

이, 지금이 실패 ... 내 봄 테스트 애플리케이션 컨텍스트이있다 "UserTransaction을가." 트랜잭션 관리자를 모의하는 방법은 무엇입니까? org.mockejb 프레임 워크를 사용하고 있지만 적절한 프레임 워크를 열어 두었습니다.

답변

12

우리는 단순히 트랜잭션 관리를위한 빈 implementaion를 작성하고 ..이 구현이 단위 테스트

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 { 

    } 

} 

에 의해 사용되는 스프링 맥락에서 사용되도록하고, 스프링 XML 파일의 다음 모습 like ...

<bean id="transactionManager" class="sample.MockedTransactionManager"/> 
관련 문제