Unittest:如何确保类型相等,而不仅仅是值相等?
Unittest: How to ensure type equality, not just value equality?
在python 2.7单元测试框架中,
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,所以它不会在以下情况下准确调用我想要它被调用。
通过定义 在测试class 中测试自己(或者更好的是,定义一个超级class,可以轻松地将附加测试附加到单元测试套件你 subclass 每个测试套件)。同时检查类型和相等性的通用测试如下:
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
并且您可以从这些子class您的整个测试库。
在python 2.7单元测试框架中,
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,所以它不会在以下情况下准确调用我想要它被调用。
通过定义 在测试class 中测试自己(或者更好的是,定义一个超级class,可以轻松地将附加测试附加到单元测试套件你 subclass 每个测试套件)。同时检查类型和相等性的通用测试如下:
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
并且您可以从这些子class您的整个测试库。