簡體   English   中英

如何對功能進行了單元測試?

[英]How to unit test that a function has been decorated?

我有一個這樣裝飾的視圖:

@check_has_permission('is_manager')
def view():
   pass

裝飾器看起來像這樣:

def check_has_permission(group=None):
    def can_user_access(user):
        if user.is_authenticated():
            if group == 'is_staff':
                return user.is_staff()
            elif group == 'is_admin':
                return (
                    user.is_admin() or
                    user.is_staff()
                )
            elif group == 'is_manager':
                return (
                    user.is_manager() or
                    user.is_admin() or
                    user.is_staff()
                )
        return False
    return user_passes_test(can_user_access, login_url=login_url)

如何編寫單元測試以確認視圖由帶有一組is_manager的check_has_permission裝飾?

我希望我可以為裝飾器本身編寫一組測試,然后只需要確認為每個裝飾器視圖調用正確的組即可。

您需要添加一個可以測試的接縫

如果您的裝飾器看起來像這樣:

def is_user_in_group(group):
    if user.is_authenticated():
        # ... snip - checks on groups and user ...

    return False


def check_has_permission(group=None):
    def can_user_access(user):
        return is_user_in_group(user, group)
    return user_passes_test(can_user_access, login_url=login_url)

然后,您的測試可以模擬is_user_in_groupuser_passes_test ,調用修飾的函數,測試is_user_in_group被正確的組調用,並測試user_passes_test被模擬is_user_in_group的返回值is_user_in_group

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM