2012-05-23 13 views
12

Używam Wiosna 3.2, Hibernate i JUnit 4.Spring @ Transactional nie działa w teście JUnit?

Moja klasa Dao jest następujący:

@Transactional public class SomeDaoImpl implements SomeDao {

Operacje update na tej pracy, gdy wykonywane bezpośrednio z aplikacji internetowych. Jednak widzę, że testy integracji, które korzystają z metod aktualizacji, w rzeczywistości nie utrzymują zmian. Czy coś odwraca transakcje, gdy wykonywane są metody junit?

Odpowiedz

11

DAO nie powinny być transakcyjne. W jaki sposób DAO może wiedzieć, czy powinien uczestniczyć w większej transakcji?

Usługi powinny zawierać transakcje w typowej wiosennej architekturze warstwowej.

Typowe jest uruchamianie testów jednostkowych dla baz danych w taki sposób, aby wycofywały się. Nie chcesz, aby twoje testy zmieniały bazę danych, chyba że masz skonfigurowaną testową bazę danych, którą możesz upuścić i odtworzyć dowolnie.

Pytanie powinno brzmieć: w jaki sposób testy, zgodnie z zapisami, dokonują transakcji? Jeśli nigdy nie popełnisz, nigdy nie zobaczysz rekordów.

+0

Przepraszam, że powinienem dodać, że używam hibernacji do utrwalania. – Nilesh

+0

Nie zmienia mojej odpowiedzi. – duffymo

+2

To nie powinno być komentarzem do twojej odpowiedzi :-). BTW najlepsza praktyka, o której wspomniano powyżej, jest dobrze opublikowana. Myślę, że zgubiłeś się próbując być pedantyczny i zapomniałeś odpowiedzieć na prawdziwe pytanie! – Nilesh