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.

0
Theo Guiboud-Ribaud 20 listopad 2019, 13:27
2
Jeśli go nie potrzebujesz, dlaczego to wywołanie jest w twojej metodzie? albo musisz to przetestować, albo nie powinno tam być, albo twój test jest bezcelowy
 – 
Stultuske
20 listopad 2019, 13:29
1
Jeśli wywołanie funkcji generuje błędy w junit, powinieneś naprawić błędy zamiast pomijać wywołanie funkcji. Może zajść potrzeba nieco refaktoryzacji function2, aby umożliwić testowanie jednostkowe.
 – 
Smile
20 listopad 2019, 13:31

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ć.

0
GhostCat 20 listopad 2019, 13:34

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).

1
Alexis Pavlidis 20 listopad 2019, 13:53