unittest一条方法测试不同用例
先写成功能实现的代码
users = [{"user": "Nicholas", "password": "123456"}]
def register(username, password1, password2):
tuple_1 = (username, password1, password2)
"""所有参数不能为空"""
if not all(tuple_1):
return {"code": 0, "msg": "所有参数不能为空"}
for user in users:
if username == user['user']:
"""此账号以存在"""
return {"code": 0, "msg": "此账号以存在"}
else:
if password1 != password2:
"""两次密码不一致"""
return {"code": 0, "msg": "两次密码不一致"}
else:
if 6 <= len(password2) <= 18:
users.append({"user": username, "password": password2})
return {"code": 1, "msg": "注册成功"}
创建一个类来调用方法并接收case数据
– 注意:在class中需要重新定义__init__方法,因为在调用class类的时候,传入参数会传到class类中,但是class类中最先是没有__init__方法,所以参数会传入class的父类unittest.TestCase,但是unittest.TestCase类不能接收case数据,所以要重新定义__init__方法,并且重新调用父类的super().init(methodName)方法,使父类方法生效
from student_work import register
import unittest
class test_cases(unittest.TestCase):
def __init__(self, methodName, case1):
self.case1 = case1
super().__init__(methodName)
def test_register_successfully(self):
"""123456"""
data = self.case1["data"]
expected = self.case1["expected"]
rest = register(*data)
self.assertEqual(expected, rest)
传入参数
import unittest
from student_work2 import test_cases
from HTMLTestRunnerNew import HTMLTestRunner
"""
case1 = {
"data": ("Boss_sun", "1234567", "1234567"),
"expected": {"code": 1, "msg": "注册成功"}
}
"""
cases = [
{"data": ("Boss_sun", "1234567", "1234567"), "expected": {"code": 1, "msg": "注册成功"}},
{"data": ("Nicholas", "1234567", "1234567"), "expected": {"code": 0, "msg": "此账号以存在"}},
{"data": ("Boss_sun1", "1234567", "1234568"), "expected": {"code": 0, "msg": "两次密码不一致"}}
]
suite = unittest.TestSuite()
"""
uses_case = test_cases("test_register_successfully", case1)
suite.addTest(uses_case)
"""
for case1 in cases:
uses_case = test_cases("test_register_successfully", case1)
suite.addTest(uses_case)
runner = HTMLTestRunner(stream=open("work2.html", "wb"),
title="Nicholas home work",
description="this is home work for Nicholas"
)
runner.run(suite)