对Python源代码的一点点挖掘表明,
TestCase注册了许多方法来测试不同类型的相等性。
self.addTypeEqualityFunc(dict, 'assertDictEqual')self.addTypeEqualityFunc(list, 'assertListEqual')self.addTypeEqualityFunc(tuple, 'assertTupleEqual')self.addTypeEqualityFunc(set, 'assertSetEqual')self.addTypeEqualityFunc(frozenset, 'assertSetEqual')try: self.addTypeEqualityFunc(unipre, 'assertMultiLineEqual')except NameError: # No unipre support in this build pass
您可以看到
unipre已注册使用
assertMultiLineEqual(),但未
str注册任何特殊功能。我不知道为什么会
str被遗漏,但是到目前为止,我对以下两种方法中的任何一种都感到满意。
直接致电
如果
assertMultiLineEqual()默认未注册使用8位字符串,则仍然可以直接调用它。
def testString(self): a = 'xaxnzzz' b = 'xbxnzzz' self.assertMultiLineEqual(a, b)
寄存器字符串类型
您也可以自己注册。只需在测试用例的
setUp()方法中添加一行即可。只需执行一次,您的所有测试方法都将使用正确的方法测试相等性。如果您的项目在所有测试用例中都有一个通用的基类,那将是放置它的好地方。
class TestAssertEqual(unittest.TestCase): def setUp(self): super(TestAssertEqual, self).setUp() self.addTypeEqualityFunc(str, self.assertMultiLineEqual) def testString(self): a = 'xaxnzzz' b = 'xbxnzzz' self.assertEqual(a, b) def testUnipre(self): a = u'xaxnzzz' b = u'xbxnzzz' self.assertEqual(a, b)
这些方法中的任何一种都将在字符串比较失败时突出显示。



