Примеры тестов#

Тут примеры тестов еще не используют fixture и параметризацию.

Тест функции#

import ipaddress


def check_ip(ip):
    try:
        ipaddress.ip_address(ip)
        return True
    except ValueError:
        return False

Тесты

from basics_01_check_ip import check_ip


def test_check_ip_correct_10_1_1_1():
    assert (
        check_ip("10.1.1.1") == True
    ), "При правильном IP, функция должна возвращать True"


def test_check_ip_correct_180_10_1_1():
    assert (
        check_ip("180.10.1.1") == True
    ), "При правильном IP, функция должна возвращать True"


def test_check_ip_wrong_octet():
    assert (
        check_ip("10.400.1.1") == False
    ), "При неправильном IP, функция должна возвращать False"


def test_check_ip_wrong_number_of_octets():
    assert (
        check_ip("10.1.1") == False
    ), "При неправильном IP, функция должна возвращать False"

Тест класса#

import ipaddress


class IPAddress:
    def __init__(self, ip, mask):
        self.ip = ip
        self.mask = mask

    def __int__(self):
        int_ip = int(ipaddress.ip_address(self.ip))
        return int_ip

    def __str__(self):
        return f"{self.ip}/{self.mask}"

    def __repr__(self):
        return f"IPAddress('{self.ip}', {self.mask})"

    def __lt__(self, second_ip):
        if type(second_ip) != IPAddress:
            raise TypeError(f"'<' not supported between instances of 'IPAddress'"
                            f" and '{type(second_ip).__name__}'")
        return (int(self), self.mask) < (int(second_ip), second_ip.mask)

    def __le__(self, second_ip):
        if type(second_ip) != IPAddress:
            raise TypeError(f"'<=' not supported between instances of 'IPAddress'"
                            f" and '{type(second_ip).__name__}'")
        return (int(self), self.mask) <= (int(second_ip), second_ip.mask)

    def __eq__(self, second_ip):
        # print("eq", self, second_ip)
        if type(second_ip) != IPAddress:
            raise TypeError(f"'==' not supported between instances of 'IPAddress'"
                            f" and '{type(second_ip).__name__}'")
        return (int(self), self.mask) == (int(second_ip), second_ip.mask)

Тесты:

from class_ipaddress import IPAddress
import pytest


def test_ipaddress_attrs():
    ip1 = IPAddress("10.1.1.1", 25)
    assert ip1.ip == "10.1.1.1"
    assert ip1.mask == 25


def test_ipaddress_str_repr():
    ip1 = IPAddress("10.1.1.1", 25)
    assert str(ip1) == "10.1.1.1/25"
    assert repr(ip1) == "IPAddress('10.1.1.1', 25)"


def test_ipaddress_int():
    ip1 = IPAddress("10.1.1.1", 25)
    assert int(ip1) == 167837953


def test_ipaddress_cmp_basic():
    ip1 = IPAddress("10.2.1.1", 25)
    ip2 = IPAddress("10.10.1.1", 25)
    assert ip1 < ip2
    assert ip2 > ip1
    assert ip1 != ip2
    assert not ip1 == ip2
    assert ip1 <= ip2
    assert ip2 >= ip1


def test_ipaddress_cmp_mask():
    ip1 = IPAddress("10.2.1.1", 24)
    ip2 = IPAddress("10.2.1.1", 25)
    assert ip1 < ip2
    assert ip2 > ip1
    assert ip1 != ip2
    assert not ip1 == ip2
    assert ip1 <= ip2
    assert ip2 >= ip1


def test_ipaddress_cmp_equal():
    ip1 = IPAddress("10.2.1.1", 24)
    ip2 = IPAddress("10.2.1.1", 24)
    assert ip1 == ip2


def test_ipaddress_cmp_raise():
    ip1 = IPAddress("10.2.1.1", 24)
    ip2 = 100
    with pytest.raises(TypeError):
        ip1 == ip2