【问题标题】:Unittest - Test for dict equalityUnittest - 测试 dict 相等性
【发布时间】:2023-03-31 00:44:01
【问题描述】:

我正在尝试进行单元测试,但不太明白为什么这两个字典显示不相等。我想知道是否有人可以给我解释这个事件。我的代码是...

import unittest

class TestEmailValidator(unittest.TestCase):

    def test(self):
        known_dict = {
            'debo@foobar.com': True,
            'debo@gmail.com': False
        }

        result_dict = {}

        for key in known_dict.keys():
            result_dict[key] = is_email_valid(key)

        # debugger results
        # result_dict = {
        #    'debo@foobar.com': True,
        #    'debo@gmail.com': False
        # }

        if self.assertEqual(known_dict, result_dict):
            print "is_email_valid passed"
        else:
            print "is_email_valid failed"

if __name__ == '__main__':
    unittest.main()

assertEqualassertEqualsassertDictEquals 得到相同的结果。我曾尝试在测试前将result_dict 分配给known_dict,但这也没有通过。

如果有人能指出为什么会发生这种情况,那就太好了。

【问题讨论】:

  • is_email_valid 未包含在内,因为它非常基本,如果字符串以 foobar.com 结尾,则返回 True。

标签: python python-2.7 unit-testing dictionary


【解决方案1】:

您在滥用断言。所有assertXYZ 方法都不返回布尔值,如果断言失败,它们只会引发异常。由于这些方法不返回任何内容,因此它们隐式返回 None。当将 None 评估为布尔值时,它会被视为 false,因此即使测试实际上通过了,您的测试也会打印出 is_email_valid failed

【讨论】:

  • 啊哈。这是有道理的。因为,当我通过 assert.. 方法进行调试时,它似乎没有抛出任何异常。感谢您的帮助@mureinik。
猜你喜欢
  • 2021-09-24
  • 2023-03-13
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多