W jaki sposób przetestowałbyś zagnieżdżoną funkcję f1() w poniższym przykładzie?Python: Jak testujecie funkcję zagnieżdżoną?
def f():
def f1():
return 1
return 2
Czy funkcje, które wymagają testów, nie powinny być zagnieżdżane?
W jaki sposób przetestowałbyś zagnieżdżoną funkcję f1() w poniższym przykładzie?Python: Jak testujecie funkcję zagnieżdżoną?
def f():
def f1():
return 1
return 2
Czy funkcje, które wymagają testów, nie powinny być zagnieżdżane?
Jest podobne pytanie w this link. Ale krótka odpowiedź: nie możesz uzyskać dostępu do wewnętrznej funkcji z zewnętrznego elementu.
Dla celów testowania, może alternatywą byłoby zmienić wewnętrzną funkcję prywatnego zewnętrznego?
Nie, ponieważ nie możesz.
Będziesz musiał ograniczyć testowanie jednostki do funkcji zewnętrznej lub przenieść wewnętrzną funkcję w inne miejsce.
Miałem takie same wątpliwości i znalazłem sposób na sprawdzenie działania wewnętrznych funkcji.
def outer():
def inner():
pass
if __debug__:
test_inner(inner)
# return
def test_inner(f):
f() # this calls the inner function
outer()
Zasadniczo możesz wysłać wewnętrzną funkcję jako parametr na zewnątrz i przetestować ją, jak chcesz. Podczas wywoływania outer() twój test będzie działał, a ponieważ jest to zamknięcie, zachowa wszelkie dodatkowe właściwości z zewnętrznej funkcji (jak zmienne). Korzystając z listy, możesz wysyłać tyle funkcji, ile chcesz. Aby zignorować jeśli, rozwiązaniem jest uruchomienie kodu tak:
python -O code.py
Jest to bardzo szczególne rozwiązanie przypadku. Rozważmy zagnieżdżoną funkcję w pętli, uzyskując dostęp do zmiennych lokalnych funkcji zewnętrznej (im częściej używamy funkcji zagnieżdżonych, IMHO). – Alfe
@alemangui: Dzięki! To odpowiada na moje pytanie. – e1i45
Ujmę to jako odpowiedź :) – alemangui