Testy i zestawy testów JUnit 4.x obsługują to inaczej niż zestawy testów JUnit 3.x.
TL; DR: ty należy ustawić pola null w testach JUnit3 stylu ale nie trzeba w testach JUnit4 stylu.
Z testów JUnit 3.x stylu, wykorzystując TestSuite
zawiera odnośniki do innych Test
przedmiotów (które mogą być TestCase
przedmioty lub inne TestSuite
obiektów). Jeśli utworzysz pakiet z wieloma testami, wtedy będą ciężkie odwołania do wszystkich obiektów z liścia TestCase
dla całego przebiegu najbardziej zewnętrznego pakietu. Jeśli niektóre z obiektów TestCase przydzielają obiekty w rozmiarze setUp()
, które zajmują dużo pamięci, a odwołania do tych obiektów są przechowywane w polach, które nie są ustawione na null
w tearDown()
, może to oznaczać problem z pamięcią.
Innymi słowy, w przypadku testów stylu JUnit 3.x specyfikacja testów do wykonania odnosi się do rzeczywistych obiektów TestCase
. Wszelkie obiekty osiągalne z obiektu TestCase
będą przechowywane w pamięci podczas testu.
Dla testów stylu JUnit 4.x specyfikacja testów do uruchomienia korzysta z obiektów Description. Obiekt Description
jest obiektem wartościowym, który określa, co należy uruchomić, ale nie sposób jego uruchomienia. Testy są przeprowadzane przez obiekt Runner
, który pobiera Description
testu lub pakietu i określa, w jaki sposób wykonać test.Nawet powiadomienie o statusie testu słuchaczowi testowemu korzysta z obiektów Description
.
Domyślna prowadnica dla przypadków testowych JUnit4, JUnit4, zachowuje odniesienie do obiektu testowego tylko na czas trwania tego testu. Jeśli używasz niestandardowego biegacza (za pomocą adnotacji @RunWith
), ten biegacz może lub nie może zachować odniesienia do testów wokół przez dłuższy czas.
Być może zastanawiasz się, co się stanie, jeśli włączysz klasę testową w stylu JUnit3 w stylu JUnit4 Suite? JUnit4 zadzwoni pod numer new TestSuite(Class)
, który utworzy osobną instancję TestCase
dla każdej metody testowej. Biegacz będzie utrzymywał odniesienie do TestSuite
przez cały czas trwania testu.
Krótko mówiąc, jeśli piszesz testy w stylu JUnit4, nie przejmuj się ustawianiem pól testowych na null
w oderwaniu (oczywiście wolne zasoby). Jeśli piszesz testy w stylu JUnit3, które przydzielają duże obiekty w setUp()
i przechowujesz te obiekty w polach TestCase
, rozważ ustawienie pól na null
.
Interesujące, nie wiedziałem, że każda metoda używa własnej instancji Test: O Thanx ... – Xorty
To samo dotyczy JUnit 4. –
Ok ... wszyscy za pomoc, ale to jest dla mnie najciekawsza odpowiedź, więc zaznaczam to zaakceptowane. – Xorty