2013-01-15 10 views

Odpowiedz

27

JUnit zawodnik będzie musiał uzyskać dostęp do pola refleksyjnie uruchomić regułę. Jeśli pole było prywatne, dostęp wyrzuciłby IllegalAccessException.

Inną opcją byłoby zmusić biegacza do modyfikacji dostępu z prywatnego na publiczny przed uruchomieniem reguły. Może to jednak powodować problemy w przypadku włączenia menedżera zabezpieczeń.

Jeśli chcesz uniknąć publicznych pól w klasie testowej, możesz skorzystać z metod opisowych JUnit 4.11, które zwracają wartość Rule z @Rule lub @ClassRule.

+8

+1 Możesz również opisać metodę za pomocą @Rule, aby uniknąć problemu. Powinieneś dodać to do swojej odpowiedzi. –

+0

Dzięki Matthew, nie wiedziałem o tym. Podobno nowa funkcjonalność w 4.11. –

+0

@KErlandsson - jesteś tego całkowicie pewien? Oto, co mówi dokumentacja interfejsu JUnit API: "Pole musi być publiczne, nie statyczne i podtyp TestRule (preferowany) lub MethodRule" – dziki

Powiązane problemy