如何为我的代码编写正确的Pytest?

2024-09-29 23:24:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为handleEmail()创建2个测试: 1电子邮件是好的,没有任何错误 2该函数抛出的邮件不是格式错误就是重复

但是,我不知道怎么做,因为它不会返回任何东西。那么如何测试这个函数呢?你知道吗

class RegisterController:    
    def handleEmail(self):
        """get email from user, check email then display message
        """
        self.getEmail()
        status = self.model.checkEmailOk(self.email)
        if not status:
            message = "Email is either wrong format or duplicate"
            self.displaymessage(message)
            return self.handleEmail()

     def createAccount(self):
        self.handleEmail()
        self.handlePasswordValid() 

Tags: 函数fromselfmessageget电子邮件emaildef
2条回答

您可以执行以下操作:

  • 分别测试checkEmailOk()函数如何检查电子邮件,以及它返回哪个电子邮件的状态
  • 使用mock和/或^{}
    • 模拟checkEmailOk()并返回truthy或falsy值
    • 模拟displaymessage()函数来检查它是否被调用,如果被调用则检查它被调用的参数(例如,如果要使用pytest-mock,则使用assert_called_once_with()断言方法)

不过,一般来说,添加测试是一件非常好的事情,因为在编写测试时,实际上是在使用代码。请注意为代码添加测试是多么简单和直接,如果您在检查某些用例时看到问题/复杂,在添加测试时达到某些前提条件/行为,这可能是被测代码设计和可用性较差的标志,也是考虑重新分解/重新构造代码的一个很好的理由。你知道吗

您的方法可以返回状态(should?)。然后您可以断言,对于一封有效的电子邮件,状态返回良好。你知道吗

对于另一部分-提出例外:

import unittest
class MyTest(unittest.TestCase):
    def test_sample(self):
        with self.assertRaises(TypeError):
            c = "a" + 42
if __name__ == '__main__':
    unittest.main()

与自有资产(…),您可以告诉您的测试您将要执行的操作会引起错误。如果引发异常,测试就通过了(这与直觉相反,但测试它是有意义的)。因此,上面添加带有int的字符串是一个TypeError,因为python中没有关于带有int的字符串的加法定义。因此,该行引发TypeError异常。测试用例看到了异常,既然我告诉它会发生,测试就通过了。你知道吗

然后应该在代码中引发一个异常,例如:

if not status:
    raise Exception(" Wrong email ")

理想情况下,不要引发这样的泛型异常—您可能希望创建一个自定义异常(或者,如果您不知道/不想想象泛型异常就可以了,那么我在这里做得太过分了)。你知道吗

相关问题 更多 >

    热门问题