2015-08-12 6 views
6

Mam klasę podstawową, którą rozszerzają wszystkie moje testy kontrolerów. Jest to ustawione tak, aby każdy test jednostki mógł mieć własne Urządzenie do załadowania.Jak sprawdzić w Play Framework, jeśli test jednostkowy wykonał wstawienie/aktualizację/usunięcie

Tak więc nadpisanie @Before sprawdzi, jakie jest wymagane urządzenie do testu, załaduj je, a następnie rozpocznij test.

Problem polega na tym, że to ładuje urządzenie za każdym razem. Nawet jeśli metoda wybrała tylko bazę danych, nic nie zmieniając.

Wewnętrzna baza danych pamięci używana przez Play Framework to baza danych H2. Zastanawiam się, czy istnieje sposób sprawdzenia po zakończeniu testu jednostkowego, czy nastąpiła zmiana w bazie danych, a jeśli nie, pomiń przeładowywanie dokładnie tych samych danych.

Próbowałem identity_scope, zwraca null bez względu na wszystko.

+0

ja nie wiem, czy istnieje możliwość, aby go osiągnąć z tylko Junit tych, ale jest narzędziem, które można łatwo zarządzać tym obciążeń. Jego dbunit i można go łatwo wykorzystać w grze. O ile mogę powiedzieć, głównym celem Junit jest oddzielenie testów od siebie. ale nie mówię, że to nie jest możliwe Może mógłbyś spróbować z @BeforeClass z kombinacją z zestawem testów. –

+0

Rozejrzałem się i wygląda na to, że będę musiał zreorganizować wszystkie moje dotychczasowe testy jednostkowe. Dzięki za sugestię, ale nie mogę na to czasu. – KdgDev

+0

Czy rozważałeś zmianę bazy danych w pamięci na rzeczywistą fizyczną bazę danych? –

Odpowiedz

2

H2 nie ma możliwości sprawdzenia, kiedy ostatnio zastosowano zmiany. Jednak Można po prostu zrobić dodatkową kolumnę, która oszczędza ostatniej modyfikacji z

CREATE TABLE TEST(ID INT, NAME VARCHAR, LAST_MOD TIMESTAMP AS NOW()); 

tamtędy Można zaoszczędzić czas rozpoczęcia testu, a następnie kwerendy DB, czy są jakieś daty modyfikacji po czasie rozpoczęcia testu.

nie widzę żadnego innego możliwego sposobu

+0

Cóż, to jest najlepszy pomysł, ale potrzebowałbym dużo czasu, aby upewnić się, że te kolumny istnieją tylko wtedy, gdy testy jednostkowe są uruchomione i automatycznie wypełniają się, gdy pojawi się wkładka. Co przypomina mi: co z usunięciem? Jak mogę śledzić, czy nastąpiło usunięcie? – KdgDev

+0

Z zapytaniem, które wysłałem, automatycznie zmieni znacznik czasu na aktualny czas w przypadku każdej modyfikacji, ponieważ AS NOW() jest wykonywany za każdym razem, gdy rekord zostanie zmieniony. Tworzenie dodatkowego pola w testach nie jest dobrym pomysłem, ale powiedziałbym, że dodatkowa kolumna nie zrobi dużej różnicy dla całego programu. Nawet jeśli byłby to tylko do celów testowych: –

+0

OK. Ale co z usuwaniem wiersza w jednym teście, a następnie oczekiwaniem, że pojawi się on w następnym? A jednak działa to tylko wtedy, gdy wiem, jaki stół przetestować. To, czego naprawdę potrzebuję, to sposób na wykrycie, czy jakakolwiek tabela w całym DB została zmieniona. – KdgDev

Powiązane problemy