2013-06-25 9 views
9

Mam@Before i @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 
    } 

Moje pytanie brzmi: czy mySetup, testMy i myTeardown wszystkim prowadzony w ramach tej samej transakcji? Wygląda na to, że powinni, ale dostaję jakiś dziwny błąd, który może sugerować, że nadepną na siebie nawzajem.

Odpowiedz

14

Tak, wszystkie trzy metody będą działać w ramach tej samej transakcji. Patrz punkt TestContext Framework/Transaction management w docs odniesienia:

Wszelkie przed metod (takich jak metody opatrzone JUnit za @Before) oraz dowolny po metod (takich jak metody opatrzone JUnit za @After) są wykonywane ciągu transakcja

W ten sposób adnotacja na mySetup() i myTeardown() jest w pewnym sensie nadmiarowa lub może nawet zostać uznana za wprowadzającą w błąd, ponieważ ich transakcyjność zależy od aktualnie wykonywanej indywidualnej metody testowania.

To dlatego, że beforeTestMethod() i afterTestMethod() wywołania zwrotne z TransactionalTestExecutionListener (odpowiedzialny za rozpoczęcia/zakończenia transakcji) są wykonywane przed JUnit na @Before i po @After metod JUnit za odpowiednio.

Powiązane problemy