Skip to main content
 首页 » 编程设计

python之对初始化期间调用的方法进行单元测试

2025年05月04日10lovecherry

我有一个类如下:

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.") 

然后您的测试应该会像写的那样工作。