繁体   English   中英

单元测试初始化​​期间调用的方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM