我有一个类如下:
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.")
然后您的测试应该会像写的那样工作。
