2013-12-19 87 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

相關問題