这篇文章主要介绍“Python的assertTrue和assertFalse有什么区别”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python的assertTrue和assertFalse有什么区别”文章能帮助大家解决问题。
定义
下面是目前单元测试模块文档中关于assertTrue 和 assertFalse 的说明,代码进行了高亮:
assertTrue(expr, msg=None)assertFalse(expr, msg=None)
测试该表达式是真值(或假值)。 注:这等价于”bool(expr) is True”而不等价于”expr is True”(后一种情况请使用 assertIs(expr, True))。 Mozilla 开发者网络中定义 真值 如下: 在一个布尔值的上下文环境中能变成“真”的值 在 Python 中等价于:
bool(expr) is True
这个和 assertTrue 的测试目的完全匹配。
因此该文档中已经指出 assertTrue 返回真值,assertFalse 返回假值。这些断言方法从接受到的值构造出一个布尔值,然后判断它。同样文档中也建议我们根本不应该使用 assertTrue 和 assertFalse。
在实践中怎么理解?
我们使用一个非常简单的例子 – 一个名称为 always_true的函数,它返回 True。我们为它写一些测试用例,然后改变代码,看看测试用例的表现。
作为开始,我们先写两个测试用例。一个是“宽松的”:使用 assertTrue来测试真值。另外一个是“严格的”:使用文档中建议的 assertIs 函数。
import unittestfrom func import always_trueclass TestAlwaysTrue(unittest.TestCase): def test_assertTrue(self): """ always_true returns a truthy value """ result = always_true() self.assertTrue(result) def test_assertIs(self): """ always_true returns True """ result = always_true() self.assertIs(result, True)
下面是func.py中的非常简单的函数代码:
def always_true(): """ I'm always True. Returns: bool: True """ return True
当你运行时,所有测试都通过了:
always_true returns True ... okalways_true returns a truthy value ... ok----------------------------------------------------------------------Ran 2 tests in 0.004sOK
开心ing~
现在,某个人将 “always_true” 函数改变成下面这样:
def always_true(): """ I'm always True. Returns: bool: True """ return 'True'
它现在是用返回字符串”True” 来替代之前反馈的 True (布尔值)。(当然,那个“某人”并没有更新文档 – 后面我们会增加难度。)
这次结果并不如开心了:
always_true returns True ... FAILalways_true returns a truthy value ... ok======================================================================FAIL: always_true returns True----------------------------------------------------------------------Traceback (most recent call last): File "/tmp/assertttt/test.py", line 22, in test_is_true self.assertIs(result, True)AssertionError: 'True' is not True----------------------------------------------------------------------Ran 2 tests in 0.004sFAILED (failures=1)
只有一个测试用例失败了!这意味着 assertTrue 给了我们一个误判false-positive。在它不应该通过测试时,它通过了。很幸运的是我们第二个测试是使用 assertIs 来写的。
因此,跟手册上了解到的信息一样,为了保证 always_true 的功能和更严格测试的结果保持一致,应该使用 assertIs 而不是 assertTrue。
使用断言的辅助方法
使用 assertIs 来测试返回 True 和 False 来冗长了。因此,如果你有个项目需要经常检查是否是返回了 True 或者 False,那们你可以自己编写一些断言的辅助方法。
这好像并没有节省大量的代码,但是我个人觉得提高了代码的可读性。
def assertIsTrue(self, value): self.assertIs(value, True)def assertIsFalse(self, value): self.assertIs(value, False)
关于“Python的assertTrue和assertFalse有什么区别”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。