2012-08-02 12 views
12

Sto utilizzando Spring 3.1.0.RELEASE, JUnit 4.8.1 e, infine, distribuisco la mia applicazione su un server JBoss 4.2 (lo so, lo so). Come parte della creazione di mio test di unità, ho questo nel mio contesto di applicazione di test Primavera ...Come si simula un TransactionManager in un test JUnit, (al di fuori del contenitore)?

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

Naturalmente, in questo momento questo fallisce perché non c'è niente legato al nome JNDI, "UserTransaction." Come faccio a prendere in giro un gestore delle transazioni? Sto usando il framework org.mockejb ma aperto a qualsiasi framework di simulazione adatto.

risposta

12

Abbiamo semplicemente creare un implementaion vuoto per il gestore delle transazioni, e garantire che questa implementazione è utilizzata nella primavera-contesto utilizzato dal test di unità

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 { 

    } 

} 

.. e nel file primavera-xml poi si guarda come ..

<bean id="transactionManager" class="sample.MockedTransactionManager"/> 
Problemi correlati