Unittest Python



没有太多的单元测试经验,有人可以帮我复习一下,解释一下这里的期望。我知道unittest的概念,但对操作功能感到困惑。

例如,我有一个这样的脚本。

def validateName(machineName):
if machineName:
pattern = "^[a-z][a-zd-]+$$"
if not re.match(pattern,machineName):
return False 
return True

def validateIp(inputIp):
try:
ipaddress.ip_address(inputIp)
except ValueError as err:
raise(err)  

所以对于我的unittest脚本,我有这样的东西:(忽略语法,我正在学习unittest)

class TestValidateF(unittest.TestCase):
def test_validateIpAddress(self):
IPAdd = "10.75.10.98"
if isinstance(IPAdd, str) == False:
message="Error Parameter is empty or has an ivalidad format. Verify it does not star with hiphen "
#self.assertTrue(ValideIPAdd(IPAdd),True)
self.assertRaises(IPAdd, message)

def test_validateMachineName(self):
sitename = "machineName"
if isinstance(machineName, str) == False:
message="Error Parameter is empty or has an ivalidad format."
#self.assertTrue(machineName(machineName),True)
self.assertRaises(machineName, message)

fine是单位测试吗?

首先:我认为测试您的代码并熟悉unittest之类的东西是一个好主意。另外,最好每个测试用例只测试一件事。因此,总的来说,你是在正确的轨道上。

然而,在你的特殊情况下,我认为目前你没有用你的两个测试用例测试任何东西。

  1. 您将IpAddmachineName设置为strings,但添加if语句,该语句仅在这两个变量不是strings时执行。因此,看起来好像没有执行self.assertRaises

  2. assertRaises倾向于期望一个异常,当传递有效参数时往往不会引发异常。因此,在您提供的两种情况下,您的两个注释self.assertTrue(...)语句往往更合理。


def test_validateIpAddress(self):
IPAdd = "10.75.10.98"
self.assertTrue(ValideIPAdd(IPAdd))
  1. 通过测试是否正确处理无效参数来尝试覆盖所有多个路径

def test_invalid_machine_name(self):
machineName = '9-not_valid%' 
self.assertFalse(machineName(machineName))
  1. 测试当你期待异常时是否会引发异常:

def test_validateIpAddress(self):
IPAdd = None
with self.assertRaises(ValueError):
ValideIPAdd(IPAdd)

关于如何编写测试用例的更多通用技巧,我个人认为在这里可以找到有用的地方。此外,我认为在学习过程中尽早熟悉mock和补丁是个好主意。它使测试用例更清晰,并允许您将精力集中在您的代码的重点上。

我希望这对你今后的步骤有帮助。

最新更新