我有一个检查函数返回值的测试,问题是函数返回一个元组列表,其中每个元组包含一个整数和一个对象。
该对象具有浮点属性,因此我想在那里使用assertAlmostEqual,但类似于列表中的“assertSameStructure”。
所以在伪代码中我想做什么:
import unittest
class Test(unittest.TestCase):
def test_foo(self):
result = foo(data)
expected_obj = Bar(23.3,12.1)
self.assertSameStructure([0,expected_obj],result)
self.assertAlmostEquals(expected_obj,result[0][1])
答案 0 :(得分:2)
有一些模块可以帮助验证模式,而不仅仅是测试特定的行为。以下是schema
的简单示例:
from schema import Schema
class Test(unittest.TestCase):
def assertHasSchema(self, schema, obj):
return Schema(*schema).validate(obj)
def test_foo(self):
result = foo(data)
expected_obj = Bar(23.3,12.1)
self.assertHasSchema([(int, Bar)], result)
self.assertAlmostEquals(expected_obj, result[0][1])
答案 1 :(得分:0)
如果你确定你只从测试中得到一个结果元组,你可以简单地测试
self.assertAlmostEquals([(0,expected_obj)], result)
伪代码中唯一缺少的是整数和对象周围的括号。
或者你可以通过运行isinstance(obj, tuple)
等来实现assertSameStructure。