Bạn sẽ kiểm tra hàm lồng nhau f1() như thế nào trong ví dụ sau?Python: Làm cách nào để đơn vị kiểm tra chức năng lồng nhau?
def f():
def f1():
return 1
return 2
Hoặc các chức năng cần thử nghiệm không được lồng nhau?
Bạn sẽ kiểm tra hàm lồng nhau f1() như thế nào trong ví dụ sau?Python: Làm cách nào để đơn vị kiểm tra chức năng lồng nhau?
def f():
def f1():
return 1
return 2
Hoặc các chức năng cần thử nghiệm không được lồng nhau?
Có một câu hỏi tương tự trong this link. Nhưng câu trả lời ngắn gọn: bạn không thể truy cập một hàm bên trong từ một phần tử bên ngoài.
Đối với mục đích thử nghiệm, có thể một sự thay thế sẽ là thay đổi hàm bên trong cho một bên ngoài riêng tư?
Bạn không, bởi vì bạn không thể.
Bạn sẽ phải giới hạn kiểm tra đơn vị của mình với chức năng bên ngoài hoặc bạn di chuyển chức năng bên trong ở nơi khác.
Tôi đã có cùng một nghi ngờ và tìm thấy một cách để có được các bài kiểm tra đi cho các chức năng bên trong.
def outer():
def inner():
pass
if __debug__:
test_inner(inner)
# return
def test_inner(f):
f() # this calls the inner function
outer()
Về cơ bản, bạn có thể gửi hàm bên trong làm tham số bên ngoài và kiểm tra nó như bạn muốn. Khi gọi bên ngoài(), thử nghiệm của bạn sẽ chạy, và vì nó là một đóng, nó sẽ giữ lại bất kỳ thuộc tính bổ sung nào từ hàm bên ngoài (như các biến). Sử dụng danh sách, bạn có thể gửi bao nhiêu chức năng tùy thích. Để bỏ qua nếu, một tùy chọn là chạy mã như sau:
python -O code.py
Đây là giải pháp trường hợp rất đặc biệt. Hãy xem xét một hàm lồng nhau trong một vòng lặp, truy cập các biến cục bộ của hàm bên ngoài (trường hợp sử dụng phổ biến hơn cho các hàm lồng nhau, IMHO). – Alfe
@alemangui: thanks! Điều đó trả lời câu hỏi của tôi. – e1i45
Tôi sẽ đặt câu trả lời là :) – alemangui