我构建了一个简单的函数,用于控制密码是否具有:
我构建了一个简单的函数来检查密码是否包含:
其职能是:
import re
class Password():
def validate(password):
while True:
if len(password) < 8:
print("False")
elif re.search('[0-9]', password) is None:
print("False")
elif re.search('[A-Z]', password) is None:
print("False")
else:
print("Your password seems fine")
break此函数保存在一个名为password.py的文件中。
现在,我想做一个控制每个条件的单元测试:
import Password
import unittest
class TestPassword(unittest.TestCase):
def test_password(self):
valid = Password.Password()
self.assertEqual("asdfA1qw",valid.validate())
if __name__ == '__main__':
unittest.main()但我不知道怎么做。如何为每个if设置一个控件?
发布于 2018-01-15 16:52:20
首先,validate可以是一个只返回True或False的空函数。
def validate(password):
if len(password) < 8:
return False
elif re.search('[0-9]', password) is None:
return False
elif re.search('[A-Z]', password) is None:
return False
else:
return True现在,这些测试是微不足道的:
import Password
import unittest
class TestPassword(unittest.TestCase):
def test_password(self):
self.assertTrue(Password.validate("asdfA1qw"))
def test_short_password(self):
self.assertFalse(Password.validate("foo"))您将使用各种无效密码定义单独的测试,以触发每个条件。(一个密码太短,另一个没有号码等)
在密码验证之前实际输入密码的任务不属于validate;它应该是使用validate的单独循环。
while True:
password = input("Enter a password: ")
if Password.validate(password):
break
print("Password invalid, try again", file=sys.stderr)发布于 2018-01-15 16:48:49
不能对每个if语句直接设置控件。您必须在测试函数中为valid.validate()提供正确的值,以迫使它进入正确的if。
发布于 2018-01-15 17:07:57
如果您想正确地测试您的函数,您可以让它为每种情况返回一个单独的值:
def validate(password):
if len(password) < 8:
return 'password must have at least 8 characters'
elif re.search('[0-9]', password) is None:
return 'password must at least contain a numeric character'
elif re.search('[A-Z]', password) is None:
return 'password must aat least contain an upper case character'
else:
return "Your password seems fine"然后,您可以通过提供一个密码来检查这些分支,该密码将破坏这些规则之一。例如:abcdefg,abcdefgh,4bcdefgh,4Bcdefgh
然后有另一种方法使用该函数,使它也有一个合理的返回值。
(固执己见的注意:如果你先写测试,你不会遇到这样的问题,因为你已经用一种易于测试的方式来设计你的代码)
https://stackoverflow.com/questions/48267322
复制相似问题