[英]Testing failure of an assignment with unittest
我的一個屬性是一個屬性,其中setter調用驗證函數,如果新值無效則引發異常:
pos.offset = 0
# @offset.setter calls validate(offset=0)
# PositionError: Offset may not be 0.
我正在嘗試添加測試以確保此操作失敗。 但是,我無法弄清楚如何讓assertRaises與賦值一起工作。
assertRaises的正常語法需要一個方法,而不是一個屬性/屬性:
self.assertRaises(PositionError, pos.offset, 0)
# TypeError: 'int' object is not callable
我嘗試過的其他形式是無效的Python:
self.assertRaises(PositionError, pos.offset = 0)
# SyntaxError: Keyword can't be an expression
self.assertRaises(PositionError, lambda: pos.offset = 0)
# SyntaxError: lambda cannot contain assignment
如何測試對屬性的分配失敗?
注意:Python 2.6,我知道unittest在2.7中有一些新功能
如果要使用unittest
測試代碼塊中發生異常而不僅僅是函數調用,可以使用assertRaises
作為上下文管理器:
with self.assertRaises(PositionError):
pos.offset = 0
這個用法可以在unittest docs中找到。
雖然這在Python 2.6中不可用,並且對你不起作用(我剛看到你的注釋),但我認為值得包含在答案中,因為對於python 2.7+來說這可能是更清晰的方法。
在Python 2.7之前,您要使用setattr(object, name, value)
( doc ) 。 這允許您為屬性設置值。
self.assertRaises(PositionError, setattr, pos, "offset", 0)
# ... ok
這應該始終有效,因為如果屬性是一個屬性,因此“秘密”調用一個函數,它必須在一個類中。 我認為標准賦值不會失敗(盡管右側的表達式可能會失敗,即x = 1/0
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.