2013-06-25 11 views
9

ho@Before e @Transactional

@RunWith(SpringJUnit4ClassRunner.class) 
@TransactionConfiguration(defaultRollback = true, transactionManager = "transactionManager") 

    @Before 
    @Transactional 
    public void mySetup() { 
     // insert some records in db 
    } 

    @After 
    @Transactional 
    public void myTeardown() { 
     // delete some records 
    } 

    @Test 
    @Transactional 
    public void testMy() { 
     // do stuff 
    } 

la mia domanda è: sarà MySetup, testMy e myTeardown tutti eseguiti all'interno della stessa transazione? Sembra che dovrebbero, ma sto ricevendo uno strano errore che potrebbe suggerire che si calpestano l'un l'altro.

risposta

14

Sì, tutti e tre i metodi verranno eseguiti all'interno della stessa transazione. Vedere la sezione TestContext Framework/Transaction management nei documenti di riferimento:

Qualunque prima metodi (quali metodi annotati con @Before di JUnit) e tutte dopo metodi (quali metodi annotati con @After di JUnit) vengono eseguite all'interno una transazione

quindi il @Transactional annotazione mySetup() e myTeardown() è di tipo ridondante, o possono essere anche considerato fuorviante, come loro transactionality è determinato dal metodo di prova singolo essere attualmente eseguita.

Questo perché il beforeTestMethod() e afterTestMethod() callback di TransactionalTestExecutionListener (responsabile per l'avvio/completamento della transazione) vengono eseguite prima di JUnit @Before e dopo @After metodi di JUnit, rispettivamente.

Problemi correlati