Chcę przetestować funkcję w moim kodzie. Ta funkcja wywołuje inną funkcję w tej samej klasie, ale w moim teście nie chcę jej wywoływać (nie potrzebuję jej). W jakiś sposób mój test zawsze wchodzi w tę wewnętrzną funkcję i popełnia błędy. Czy jest jakiś sposób „pominięcia” wywołania tej funkcji wewnętrznej?
Oto przykład:
void function1() {
if(condition == true) {
variable1 = function2()
}
}
Object function2() {
//Do something
return Object;
}
Czy istnieje sposób, aby uniknąć wywoływania funkcji 2?
Dziękuję Ci.
2 odpowiedzi
Struktury takie jak Mockito oferują koncepcje takie jak szpiedzy. Korzystając ze szpiega Mockito, możesz uzyskać pełną kontrolę nad tym, jakie metody są wywoływane.
Ale: robisz to tylko w bardzo konkretnych przypadkach.
Kiedy masz trudności z testowaniem kodu produkcyjnego, najprawdopodobniej: ponieważ napisałeś kod trudny do przetestowania.
Tak więc: możesz spróbować użyć tutaj szpiega, ale wolałbym raczej cofnąć się i ponownie przemyśleć, co dokładnie zamierzasz tutaj zrobić.
Najpierw należy rozważyć naprawienie tych błędów zgłaszanych z function2()
. Jeśli jednak chcesz przetestować function1()
izolowane, wówczas opisywane zachowanie nazywa się Test Doubles
. Jednym z rodzajów tych podwójnych testów jest Mocking
, w którym można sterować zachowaniem klasy lub metody.
Istnieją frameworki, które to robią, takie jak Mockito, ale oczywiście możesz rozwiązać ten problem samodzielnie, niezależnie od ramy.
Na przykład, jeśli używasz Mockito, powinieneś w ten sposób kpić z metody function2()
YouClassName mockedClass = mock(YouClassName.class);
when(mockedClass.function2()).thenReturn(new Object()); //you can of course return anything here
Testowanie funkcji w izolacji jest dość powszechne, ale w czasach, gdy istnieją zależności między obiektami. Jeśli nie ma żadnych zależności, prawdopodobnie powinieneś rozważyć rezygnację z podwójnych testów testowych (chyba że jesteś pewien, co robisz).
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].
function2
, aby umożliwić testowanie jednostkowe.