2013-12-19 63 views
0

我有一个测试,检查函数的返回值,问题是该函数返回一个元组列表,其中每个元组包含一个整数和一个对象。测试该列表包含相同类型的“对象”python unittest

该对象具有浮点属性,所以我想在那里使用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]) 
+1

'self.assertIsInstance(结果[0],INT)'和'self.assertIsInstance(结果[1],酒吧)'? – Blender

+0

@Blender结果可以是任意长度的容器然后 – wim

+0

你可以编写你想要的断言方法。并行循环遍历预期列表和实际列表,并为每个元组声明您感兴趣的元素声明。 (另外,我认为你的通话中缺少元组圆括号。) – user2357112

回答

0

如果你确信你只能得到一个结果元组从测试回来,你可以简单地测试了

self.assertAlmostEquals([(0,expected_obj)], result) 

的只有你的伪代码中缺少的东西是围绕整数和对象的括号。

另外,您可以通过运行isinstance(obj, tuple)等实现assertSameStructure

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]) 
+0

这看起来确实不错,但它似乎不起作用:( – user1443778

+0

>>> from架构导入架构 >>> class Bar(): .. 。DEF __init __(个体经营): ... self.a = 2 ... >>> Bar类(): ... DEF __init __(个体经营): ... self.a = 2 ... >>> from schema import Schema >>> class Bar(): ... def __init __(self): ... self.a = 2 ... Schema(Bar).validate (Bar()) 回溯(最近的致电las t): raised TypeError('__ init __()只需要1个参数(给出2)') – user1443778

+0

@ user1443778:这似乎是Bar类的问题,而不是模式验证码。创建“Bar”的新实例是否会引发错误? '栏()' – Blender

相关问题