[英]Unit testing a method called during initialization?
我有一个像下面这样的课程:
class Positive(object):
def __init__(self, item):
self._validate_item(item)
self.item = item
def _validate_item(self, item):
if item <= 0:
raise ValueError("item should be positive.")
我想为_validate_item()
编写单元测试,如下所示:
class PositiveTests(unittest.TestCase):
def test_validate_item_error(self):
self.assertRaises(
ValueError,
Positive._validate_item,
0
)
不幸的是,这是行不通的,因为单元测试仅将0传递给该方法,而不是将类实例(用于self
参数)和0传递给该方法。除了必须通过间接测试该验证方法之外,还有其他解决方案吗?该类的__init__()
?
如果您不在方法的主体中使用self,则暗示它可能不必是类成员。 您可以将_validate_item函数移入模块范围:
def _validate_item(item):
if item <= 0:
raise ValueError("item should be positive.")
或者,如果确实必须将其留在类中,则将方法标记为静态:
class Positive(object):
def __init__(self, item):
self._validate_item(item)
self.item = item
@staticmethod
def _validate_item(item):
if item <= 0:
raise ValueError("item should be positive.")
然后,您的测试应按书面要求进行。
您没有创建Positive实例。 怎么样
Positive()._validate_item, 0
好吧,_validate_item()是通过构造函数测试的。 用null或负值调用它会引发ValueError异常。
退后一步,这是目标吗? “要求”是不得创建具有零或负值的对象。
现在这是一个人为的示例,因此以上内容不适用于实际类; 真正进行_validate_item()方法专用测试的另一种可能性是,创建一个具有正值的对象,然后在其上调用validate_item()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.