繁体   English   中英

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

[英]Unittest: How to ensure type equality, not just value equality?

在python 2.7 unittest框架中,

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

不会失败。

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

我不想替换每一个

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

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

我不能使用addTypeEqualityFunc因为只有当两个对象具有完全相同的typeobj时才会调用我的函数,因此在我希望调用它时不会精确调用它。

通过在测试类中定义自己的测试,可以很容易地将附加测试附加到单元测试套件上(或者甚至更好,为每个测试套件定义子类的超类)。 将同时检查类型和相等性的通用测试如下:

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

或者更短:

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

该函数检查给定对象是否按类型和值相等。 (这些不是专门用于字符串对象本身,但显然如果你需要更复杂的测试,你可以重写它)。 换句话说,通过将多个测试用于一个测试,您可以隐藏您应该检查的复杂性。

然后调用函数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

您可以从这些子类化整个测试库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM