Chcę napisać przypadki testowe dla dużej ilości kodu, chciałbym poznać szczegóły funkcji adnotacji JUnit @Rule
, dzięki czemu mogę jej używać do pisania przypadków testowych. Proszę podać dobre odpowiedzi lub linki, które podają szczegółowy opis jego funkcjonalności na prostym przykładzie.Jak działa Junit @Rule?
Odpowiedz
Reguły są stosowane w celu dodania dodatkowych funkcji, które mają zastosowanie do wszystkich testów w klasie testowej, ale w bardziej ogólny sposób.
Na przykład ExternalResource wykonuje kod przed i po metodzie testowej, bez konieczności używania @Before
i @After
. Korzystanie z ExternalResource
zamiast @Before
i @After
daje możliwości lepszego wykorzystania kodu; ta sama reguła może być używana z dwóch różnych klas testowych.
Konstrukcja została oparta na: Interceptors in JUnit
Więcej informacji można znaleźć JUnit wiki : Rules.
Korekta: "Na przykład ExternalResource wykonuje kod przed i po teście * klasy *." Jest coś w używaniu apply(), aby uruchomić ExternalResource pomiędzy testami. – derekm
znalazłem this article wyjaśnia @Rule
s raczej dobrze, zwłaszcza sprawdzić ostatnią sekcję „Kolejność zdarzeń w szczegółach”
Zasady JUnit pracują na zasadzie AOP (programowanie aspektowe). Przechwytuje metodę testowania, dając możliwość zrobienia pewnych rzeczy przed lub po wykonaniu określonej metody testowej.
Weźmy przykład poniższy kod:
public class JunitRuleTest {
@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();
@Test
public void testRule() throws IOException {
File newFolder = tempFolder.newFolder("Temp Folder");
assertTrue(newFolder.exists());
}
}
każdym razem wyżej metoda badania jest wykonywana, tymczasowy folder zostanie utworzony i zostanie usunięty po wykonaniu metody. Jest to przykład reguły out-of-box dostarczonej przez Junit.
Podobne zachowanie można również osiągnąć, tworząc własne reguły. Junit udostępnia interfejs TestRule, który można zaimplementować w celu utworzenia własnej reguły Junit.
Oto kilka przydatnych linków dla odniesienia:
, więc zostanie usunięty bez pisania żadnego kodu do usunięcia/wyczyszczenia obiektu? – Dror
@Dror: Tak. To jest poprawne. –
spójrz na źródło https://github.com/junit-team/junit4/blob/master/src/main/java/org/junit/rules/TemporaryFolder.java, folder jest tworzony w wywołaniu zwrotnym before() metoda i usunięta w metodzie wywołania zwrotnego after() ... – PierluigiVernetto
tl; dr na jak to działa: JUnit zawija metodę testową w obiekcie Zestawienie tak statement.Execute() uruchamia twój test. Następnie zamiast wywoływania instrukcji statement.Execute() bezpośrednio, aby uruchomić test, JUnit przekazuje instrukcję do TestRule z adnotacją @Rule. Funkcja "Zastosuj" TestRule zwraca nową Oświadczenie, z uwzględnieniem Oświadczenia z twojego testu. Nowa metoda Execute() instrukcji może wywoływać metodę wykonywania instrukcji Test (lub nie, lub wywoływać ją wiele razy) i robić, co chce przed i po. Teraz JUnit ma nowe oświadczenie, które robi więcej niż tylko test, i może ponownie przekazać to do innych reguł, zanim w końcu wywoła Execute.
Instrukcja ma metodę assess not execute. – Hemanth
- 1. Junit @Rule i @ClassRule
- 2. Interakcja JUnit @Rule lifecycle z @Before
- 3. Dlaczego pola @Rule z adnotacjami w JUnit muszą być publiczne?
- 4. Jak działa assumeTrue() w JUnit
- 5. Jak działa Cobertura z JUnit?
- 6. JUnit dziedziczenie testowe nie działa
- 7. LaTeX \ rule napełnia linię
- 8. Dlaczego JUnit 4 na Androidzie nie działa?
- 9. Java Thread.currentThread(). SetUncaughtExceptionHandler() nie działa z JUNIT?
- 10. Spring @ Transactional nie działa w teście JUnit?
- 11. ANTLR: „brak dostępu atrybut zakresu Rule” problemu
- 12. Jak mogę użyć wyjątku JUnit ExpectedException w Scali?
- 13. Jak kontynuować test po wyrzuceniu JUnit ExpectedException?
- 14. Prolog lub (;) Rule Return Multiple Result
- 15. Java Rule Engine for Game AI
- 16. Jak uzyskać wersję JUnit
- 17. Jak JUnit przetestować iteracyjnej
- 18. jak JUnit test IntentService
- 19. Rule Engine - jak przechowywać reguły, aby uniknąć parsowania na edycji?
- 20. Nie można debugować kodu Mockito/JUnit w środowisku Eclipse, działa dobrze tylko z JUnit
- 21. JUnit - oczekiwany komunikat wyjątku wyrażenie regularne
- 22. Jak wykonać reguły junit wewnątrz transakcji AbstractTransactionalJUnit4SpringContextTests?
- 23. Dlaczego nie jest usuwany tymczasowy folder JUnit?
- 24. Projekt Gradle działa jUnit 5 testów w IntelliJ
- 25. Najnowsza wersja cucumber-java i cucumber-junit nie działa
- 26. Usuń lub Usuń Kalendarz Rule „Time Off Rule” poprzez wtyczki lub prostych aplikacji konsoli w C# dla CRM 2015
- 27. JUnit: Jak symulować testowanie System.in?
- 28. jak obsługiwać wyjątki w junit
- 29. Różnice między JUnit 3 i JUnit 4
- 30. JUnit Zasada TemporaryFolder arbitralnie rzuca IOException
Przeszedłem już przez ten link [http://cwd.dhemery.com/2011/01/what-junit-rules-are-good-for/](http://cwd.dhemery.com/2011/ 01/what-junit-rules-are-good-for /) – Dipak
Myślę, że jest podobny do pojęcia iniekcji, czy mam rację? – Chao
[Zasady Junit zostały wyjaśnione w tym artykule] (http://www.singhajit.com/junit-rules/) –