python 对我的密码验证代码进行单元测试
python unit testing for my password validation code
我有这个功能代码:
class PasswordChecker(object):
passwords = ["aD23"]
def check(self, passwords):
if not passwords:
raise NameError('You have not entered any password')
else:
pass
而这个测试代码:
import unittest
from app.passwordchecker import PasswordChecker
class TestPasswordChecker(unittest.TestCase):
def setUp(self):
self.pswd = PasswordChecker()
def test_password_checker_raises_nameerror_for_noargs(self):
self.assertRaises(NameError, self.pswd.check, [])
我希望当通过在 self.assertRaises()
中将 []
替换为 [items]
使测试失败时,它应该抛出 NameError - You have not entered any password
。但是,它抛出一个不同的错误,这意味着我的代码有问题。请帮忙
您看到的行为似乎是正确的:
self.assertRaises(NameError, self.pswd.check, [])
你用空列表调用 check
not passwords
是 True
并且引发了 NameError
。就测试而言,这是预期的行为,一切都很好。
现在,如果您将行更改为例如:
self.assertRaises(NameError, self.pswd.check, ['123'])
你会看到:
======================================================================
FAIL: test_password_checker_raises_nameerror_for_noargs (test_check.TestPasswordChecker)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/so/test_check.py", line 10, in test_password_checker_raises_nameerror_for_noargs
self.assertRaises(NameError, self.pswd.check, ['123'])
AssertionError: NameError not raised
因为方法 运行,并返回 None
,但测试表明它预期会引发 NameError
异常。
照原样,您的测试可能如下所示:
...
def test_password_checker_raises_nameerror_for_noargs(self):
self.assertRaises(NameError, self.pswd.check, [])
def test_password_checker_returns_none_with_args(self):
self.assertIsNone(self.pswd.check(['123']))
...
如果没有参数,我们预计会引发 NameError
。对于传递的参数,我们期望返回 None
。
旁注:NameError
具有尝试使用未知变量的通常含义。也许 ValueError
会更合适。或者您可能想定义自己的异常。
我有这个功能代码:
class PasswordChecker(object):
passwords = ["aD23"]
def check(self, passwords):
if not passwords:
raise NameError('You have not entered any password')
else:
pass
而这个测试代码:
import unittest
from app.passwordchecker import PasswordChecker
class TestPasswordChecker(unittest.TestCase):
def setUp(self):
self.pswd = PasswordChecker()
def test_password_checker_raises_nameerror_for_noargs(self):
self.assertRaises(NameError, self.pswd.check, [])
我希望当通过在 self.assertRaises()
中将 []
替换为 [items]
使测试失败时,它应该抛出 NameError - You have not entered any password
。但是,它抛出一个不同的错误,这意味着我的代码有问题。请帮忙
您看到的行为似乎是正确的:
self.assertRaises(NameError, self.pswd.check, [])
你用空列表调用 check
not passwords
是 True
并且引发了 NameError
。就测试而言,这是预期的行为,一切都很好。
现在,如果您将行更改为例如:
self.assertRaises(NameError, self.pswd.check, ['123'])
你会看到:
======================================================================
FAIL: test_password_checker_raises_nameerror_for_noargs (test_check.TestPasswordChecker)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/so/test_check.py", line 10, in test_password_checker_raises_nameerror_for_noargs
self.assertRaises(NameError, self.pswd.check, ['123'])
AssertionError: NameError not raised
因为方法 运行,并返回 None
,但测试表明它预期会引发 NameError
异常。
照原样,您的测试可能如下所示:
...
def test_password_checker_raises_nameerror_for_noargs(self):
self.assertRaises(NameError, self.pswd.check, [])
def test_password_checker_returns_none_with_args(self):
self.assertIsNone(self.pswd.check(['123']))
...
如果没有参数,我们预计会引发 NameError
。对于传递的参数,我们期望返回 None
。
旁注:NameError
具有尝试使用未知变量的通常含义。也许 ValueError
会更合适。或者您可能想定义自己的异常。