[英]How to write correct Pytest test for my code?
我想为 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()
您可以执行以下操作:
checkEmailOk()
函数如何检查电子邮件以及它为哪个电子邮件返回什么状态pytest-mock
:
checkEmailOk()
并返回一个真值或假值displaymessage()
函数来检查它是否被调用,并检查它被调用的参数是什么assert_called_once_with()
如果你要使用pytest-mock
,则使用assert_called_once_with()
断言方法)但是,总的来说,添加测试是一件非常好的事情,因为您在为代码编写测试时实际上是在使用它。 请注意为您的代码添加测试是多么容易和直接,如果您在检查某些用例时看到问题/复杂性,在添加测试时达到某些先决条件/行为,这可能是设计和可用性不佳的标志测试中的代码以及考虑重构/重构它的一个很好的理由。
您的方法可以返回状态(应该?)。 然后,您可以断言返回的状态对于有效电子邮件来说是好的。
对于另一部分 - 引发异常:
import unittest
class MyTest(unittest.TestCase):
def test_sample(self):
with self.assertRaises(TypeError):
c = "a" + 42
if __name__ == '__main__':
unittest.main()
使用 self.assertRaises(...),你可以告诉你的测试你将要做一些应该引发错误的事情。 如果引发异常,则测试通过(违反直觉,但对其进行测试是有意义的)。 所以上面添加一个带有int的字符串是一个TypeError,因为python中没有对带有int的字符串加法的定义。 因此,该行引发了 TypeError 异常。 测试用例看到异常,因为我告诉它会发生,测试通过。
然后你应该在你的代码中引发一个异常,让我们说:
if not status:
raise Exception(" Wrong email ")
理想情况下不要引发这样的通用异常 - 您可能想要创建一个自定义异常(或者我可能在这里走得太远,如果您不知道/想要获得通用异常就可以了)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.