Как протестировать простой класс? - PullRequest
2 голосов
/ 24 февраля 2020

У меня есть класс python:

class Animal:
   def __init__(self, name, energy=100):
       self.name = name
       self.energy = energy            

Мне нужно создать несколько простых тестов с использованием модуля unittest. Например, чтобы проверить, является ли энергия больше нуля или name является строковым типом. Как мне это сделать? (У меня пока нет опыта).

1 Ответ

2 голосов
/ 24 февраля 2020

Такие вещи обычно не тестируются с помощью модульного теста, но вместо этого они будут принудительно применяться с инвариантом класса в методе __init__:

class Animal:
   def __init__(self, name, energy=100):
       if not isinstance(name, str):
           raise TypeError("name should be a string")
       if energy <= 0:
           raise ValueError("energy has to be more than 0")

       self.name = name
       self.energy = energy   

Таким образом, вы никогда не сможете даже случайно создать Animal с недопустимыми значениями в нем.

Конечно, после установки этих инвариантов вы можете проверить, что они действительно на месте. Например, с популярным модулем pytest:

import pytest

import Animal


def test_init_ok():
    animal = Animal("name", 100)
    assert animal.name == "name"
    assert animal.energy == 100


def test_init_bad_name():
    with pytest.raises(TypeError):
        animal = Animal(123, 100)


def test_init_bad_energy():
    with pytest.raises(ValueError):
        animal = Animal("name", 0)
    with pytest.raises(ValueError):
        animal = Animal("name", -100)

Или с помощью встроенного модуля unittest:

import unittest

import Animal


class TestAnimal(unittest.TestCase):
    def test_init_ok(self):
        animal = Animal("name", 100)
        self.assertEqual(animal.name, "name")
        self.assertEqual(animal.energy, 100)

    def test_init_bad_name(self):
        with self.assertRaises(TypeError):
            animal = Animal(123, 100)

    def test_init_bad_energy(self):
        with self.assertRaises(ValueError):
            animal = Animal("name", 0)
        with self.assertRaises(ValueError):
            animal = Animal("name", -100)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...