2012-08-02 14 views
12

Estoy usando Spring 3.1.0.RELEASE, JUnit 4.8.1, y finalmente implementando mi aplicación en un servidor JBoss 4.2 (lo sé, lo sé). Como parte de la creación de mi unidad de prueba, tengo esto en mi contexto de aplicación de pruebas de la primavera ...¿Cómo me burlo de un TransactionManager en una prueba JUnit, (fuera del contenedor)?

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

Por supuesto, en este momento no lo consigue porque no hay nada unido al nombre JNDI, "UserTransaction." ¿Cómo me burlo de un administrador de transacciones? Estoy usando el framework org.mockejb pero abierto a cualquier marco de burla adecuado.

Respuesta

12

simplemente Creamos un implementaion vacío para el administrador de transacciones, y nos aseguramos de que esta aplicación se utiliza en la primavera-contexto utilizado por la prueba de la unidad

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 { 

    } 

} 

.. y en el archivo de primavera-xml luego mira como ..

<bean id="transactionManager" class="sample.MockedTransactionManager"/> 
Cuestiones relacionadas