代码之家  ›  专栏  ›  技术社区  ›  Eric O.

我的密码验证代码的python单元测试[关闭]

  •  2
  • Eric O.  · 技术社区  · 8 年前

    我有这个功能代码:

    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, [])
    

    我希望当测试失败时 [] 具有 [items] 在里面 self.assertRaises() NameError - You have not entered any password . 但是,它抛出了一个不同的错误,这意味着我的代码有问题。请帮忙

    1 回复  |  直到 8 年前
        1
  •  1
  •   Ondrej K.    8 年前

    你看到的行为似乎是正确的:

    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 命名错误

    实际上,您的测试可能如下所示:

    ...
    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']))
    ...
    

    我们希望没有args 命名错误 被抚养。经过论证,我们预计 没有 被退回。


    NameError 通常的意思是尝试使用未知变量。也许 ValueError 更合适。或者您可能需要定义自己的异常。

    推荐文章