这些帖子将分为三个部分。
- 密码验证功能
- 重构密码验证函数
- 对密码验证功能进行单元测试
这是Python系列中自定义密码验证的第三部分,也是最后一部分。我们将看看对密码验证功能进行单元测试 .
下面是重构后的代码:
from string import ( ascii_lowercase, ascii_uppercase, digits, punctuation, whitespace) def contains_character(password: str = "", sack: str = "") -> bool: has_char = False for char in password: if char in sack: has_char = True break return has_char def is_valid_size(password: str = "") -> bool: MIN_SIZE = 6 MAX_SIZE = 20 password_size = len(password) return MIN_SIZE <= password_size <= MAX_SIZE def get_invalid_chars(): valid_chars = {'-', '_', '.', '!', '@', '#', '$', '^', '&', '(', ')'} invalid_chars = set(punctuation + whitespace) - valid_chars return "".join(invalid_chars) def is_valid_password(password: str = "") -> bool: try: if not password: return False new_password = password.strip() if not is_valid_size(new_password): return False invalid_chars = get_invalid_chars() if contains_character(new_password, invalid_chars): return False if not contains_character(new_password, digits): return False if not contains_character(new_password, ascii_lowercase): return False if not contains_character(new_password, ascii_uppercase): return False return True except: return False
我们的目标是为上面的代码片段编写单元测试。我们可以捕捉隐藏的错误,并在修复代码以通过测试时继续重构。
在测试:nut_and_bolt:️之前
有些事你应该知道:
- 这将是一个单元测试
- 我们将利用python的内置测试模块,
unittest
- 我们将测试,
contains_character
,is_valid_size
和is_valid_password
整齐 - 测试将在
test.py
所以上面的片段可能在app.py
(你选择你想要的名字) -
我们将参考
试验contains_character
contains_character
返回bool
,要么True
或者False
。所以我们可以使用assertTrue
还有assertFalse
方法。
我们将测试:
- 如果既没有传递密码也没有传递sack(无参数)
- 为了角色
"i"
在字符串中,"python"
- 为了角色
"py"
在字符串中,"python"
- 为了角色
"python"
在字符串中,"python"