Unittest:如何确保类型相等,而不仅仅是值相等?

2024-09-27 20:17:06 发布

您现在位置:Python中文网/ 问答频道 /正文

在python2.7unittest框架中

self.assertEquals(u"a","a")

不会失败。在

如何比较unittest中的字符串,使str不等于unicode?在

我不想把每一个

^{pr2}$

v = foo(...)
self.assertEquals(type(v),str)
self.assertEquals(v,"a")

我不能使用^{},因为只有当两个对象的类型完全相同时,才会调用函数obj,因此当我希望调用函数时,它不会被精确地调用。在


Tags: 对象字符串self框架obj类型footype
1条回答
网友
1楼 · 发布于 2024-09-27 20:17:06

通过在测试类中定义自己的测试(或者更好的是为每个测试套件定义一个子类)可以轻松地将附加测试附加到单元测试套件中。同时检查类型和相等性的通用测试如下:

def assertEqualsValType(self,obj1,obj2,msg=None):
    self.assertEquals(type(obj1),type(obj2),msg)
    self.assertEquals(obj1,obj2,msg)

或者更短:

^{pr2}$

该函数检查两个给定对象的类型和值是否相等。(这些不是专门针对字符串对象本身的,但是显然,如果需要更复杂的测试,可以重写它)。换言之,通过在一个测试中使用多个测试来隐藏复杂性。在

然后调用函数self.assertEqualsValType('a',u'a'),这将失败。此外,通过尽可能保持测试的通用性,您可以找到它的其他用途:例如self.assertEqualsValType(2,2.0)也将失败。在

您还可以重写上面的函数以提供更多信息等

这样你就可以开始一个更高级的单元测试了。例如:

class BaseUnitTest(unittest.TestCase):

    def assertEqualsValType(self,obj1,obj2,msg=None):
        self.assertEquals(type(obj1),type(obj2),msg)
        self.assertEquals(obj1,obj2,msg)

    def assertBetweenEqual(self, value, min_value, max_value):
        self.assertGreaterEqual(value, min_value)
        self.assertLessEqual(value, max_value)

    def assertFoo(self,para,meters):
        #...
        pass

你可以从这些子类化你的整个测试库。在

相关问题 更多 >

    热门问题