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

got*_*nes 1 python oop testing unit-testing

我有一个类如下:

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.")
Run Code Online (Sandbox Code Playgroud)

我想写一个单元测试_validate_item(),如下所示:

class PositiveTests(unittest.TestCase):
    def test_validate_item_error(self):
        self.assertRaises(
            ValueError,
            Positive._validate_item,
            0
        )
Run Code Online (Sandbox Code Playgroud)

不幸的是,这将不能工作,因为单元测试只传递0该方法,而不是一个类的实例(用于self比具有经由间接测试此验证方法参数)和0是否有任何解决这个其它__init__()的班级?

小智 7

如果你没有在方法体中使用self,那么暗示它可能不需要是类成员.您可以将_validate_item函数移动到模块范围中:

def _validate_item(item):
    if item <= 0:
        raise ValueError("item should be positive.")
Run Code Online (Sandbox Code Playgroud)

或者,如果它真的必须留在类中,则将方法标记为静态:

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.")
Run Code Online (Sandbox Code Playgroud)

然后你的测试应该按照书面形式工作