2012-11-28 19 views
7

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?

+0

@alemangui: Dzięki! To odpowiada na moje pytanie. – e1i45

+0

Ujmę to jako odpowiedź :) – alemangui

Odpowiedz

3

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?

5

Nie, ponieważ nie możesz.

Będziesz musiał ograniczyć testowanie jednostki do funkcji zewnętrznej lub przenieść wewnętrzną funkcję w inne miejsce.

1

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 
+0

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

Powiązane problemy