2012-08-02 3 views
12

Ich benutze Spring 3.1.0.RELEASE, JUnit 4.8.1, und schließlich meine Anwendung auf einem JBoss 4.2 Server (ich weiß, ich weiß). Im Rahmen der Einstellung meines Unit-Test-up, habe ich dies in meinem Frühling Testanwendungskontext ...Wie spotze ich einen TransactionManager in einem JUnit-Test (außerhalb des Containers)?

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

Natürlich, gerade jetzt dies nicht gelingt, weil es nichts mit dem JNDI-Namen gebunden ist, „Usertransaction.“ Wie verspotte ich einen Transaktionsmanager? Ich benutze das org.mockejb-Framework, aber offen für alle geeigneten mockenden Frameworks.

Antwort

12

Wir haben einfach eine leere implementaion für den Transaktions-Manager erstellen und sicherstellen, dass diese Umsetzung im Frühjahr-Kontext von dem Unit-Test verwendet wird

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 { 

    } 

} 

.. und in Frühling-xml-Datei dann aussehen wie ..

<bean id="transactionManager" class="sample.MockedTransactionManager"/> 
Verwandte Themen