У меня есть класс, как следующее:Единичное тестирование метода, вызываемого во время инициализации?
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__()
?
Мне нравится этот ответ. Если вам кажется, что нужно самостоятельно писать тесты для _validate_item(), скорее всего, это действительно само по себе. –
staticmethods в Python в большинстве случаев бессмысленны, в этом случае используйте classmethod! – u0b34a0f6ae
Я бы не использовал декоратор '@ classmethod' здесь по той же причине, что я бы не определил его как метод экземпляра. Там не используется 'cls'. Учитывая мои druthers, я сделал бы его частной функцией в области модуля. –