Модульное тестирование методов, определенных внутри класса, с использованием doctesting

Мне нужно определить: 1. doctests для 'init', который создает круг 'c1' с радиусом 2,5 и проверяет, что доступ к атрибуту 'radius' возвращает 2,5. 2. Определите тест документа для «области», который создает круг «c1» с радиусом 2,5 и проверяет, что вычисленная площадь равна 19,63.

Я написал ниже упомянутый код, но не получил результата. Пожалуйста, предложите.

class Circle:

    def __init__(self, radius):

        """
        >>> c1=Circle(2.5).__init__()
        2.5
        """
        self.radius = radius

    def area(self):

        """
        >>> c1=Circle(2.5).area()
        19.63

        """

        return round(math.pi*(self.radius**2),2)

person user2384052    schedule 02.04.2019    source источник


Ответы (2)


__init__() возвращает не радиус, а объект Circle, который вы создали. Если вы обновите doctest до чего-то вроде

>>> Circle(2.5).radius
2.5

он должен работать. Также обратите внимание, что вы не должны вызывать __init__() напрямую, это то, что делает Circle(2.5). В вашем случае вы должны получить сообщение об ошибке, так как вы не передаете нужное количество аргументов.

person c0lon    schedule 02.04.2019
comment
Вы предлагаете что-то вроде этого: ››› c1=Circle(2.5) ››› c1.radius 2.5 - person user2384052; 02.04.2019
comment
Вы можете упомянуть в своем ответе, что выражения присваивания не возвращают указанное значение. - person Oluwafemi Sule; 02.04.2019

Вот как, вероятно, можно написать ваш класс с doctests:

import math

class Circle:

    def __init__(self, radius):

        """
        >>> c1 = Circle(2.5)
        >>> c1.radius
        2.5
        """
        self.radius = radius

    def area(self):

        """
        >>> c1 = Circle(2.5)
        >>> c1.area()
        19.63

        """

        return round(math.pi*(self.radius**2),2)

И вот как вы должны запустить doctest, чтобы получить подробный вывод:

$ python -m doctest -v file.py
Trying:
    c1 = Circle(2.5)
Expecting nothing
ok
Trying:
    c1.radius
Expecting:
    2.5
ok
Trying:
    c1 = Circle(2.5)
Expecting nothing
ok
Trying:
    c1.area()
Expecting:
    19.63
ok
2 items had no tests:
    file
    file.Circle
2 items passed all tests:
   2 tests in file.Circle.__init__
   2 tests in file.Circle.area
4 tests in 4 items.
4 passed and 0 failed.
Test passed.
person sanyassh    schedule 02.04.2019