Ошибка при тестировании TestAreaCreation в Python с использованием Unittest - PullRequest
0 голосов
/ 23 января 2020

Вопрос:

Определить класс Circle с методом init, который инициализирует цикл с радиусом атрибута, имеющим следующие ограничения.

  1. радиус должен быть числовым c значение , если нет, поднимите ошибку типа с сообщением об ошибке «радиус должен быть числом».
  2. радиус должен быть между 0 и 1000 включительно с обеих сторон, если нет, поднимите значение ошибки с сообщением об ошибке «радиус должен быть между 0 и 1000 включительно "
  3. Определить область и окружность метода класса, которые должны возвращать значения, округленные до 2 десятичных знаков.

Завершить определение класса TestCircleArea, который проверяет поведение метода области как спецификацию ниже.

Определите тестовый метод test_circlearea_with_random_numeric_radius, который создает круг c1 с радиусом 2.5 и проверьте, соответствует ли его вычисленная область значению 19.63

Определите тестовый метод test_circlearea_with_min_radius, который создает круг c2 с радиусом 0, и проверьте если его вычисленная площадь совпадает с val ue 0

Определить метод теста test_circlearea_with_max_radius, который создает круг c3 с радиусом 1000 и проверяет, соответствует ли его вычисленная область значению 3141592.65

Пробное решение:

import inspect
import re
import unittest
import math

class Circle:

    def __init__(self, radius):
        # Define the initialization method below
        self.radius=radius
        if not isinstance(self.radius,(int,float)):
            raise TypeError("radius must be a number")
        elif(self.radius>1000 or self.radius<0):
            raise ValueError("radius must be between 0 and 1000 inclusive")
        else:
            pass
    def area(self):
        # Define the area functionality below
        return math.pi*(self.radius**2)
    def circumference(self):
        return 2*math.pi*self.radius
        # Define the circumference functionality below

class TestCircleArea(unittest.TestCase):

    def test_circlearea_with_random_numeric_radius(self):
        # Define a circle 'c1' with radius 2.5, and check if 
        # its area is 19.63.
        c1=Circle(2.5)
        self.assertEqual(c1.area(), 2.5)

    def test_circlearea_with_min_radius(self):
        # Define a circle 'c2' with radius 0, and check if 
        # its area is 0.
        c2=Circle(0)
        self.assertEqual(c2.area(), 0)

    def test_circlearea_with_max_radius(self):
        # Define a circle 'c3' with radius 1000.1. and check if 
        # its area is 3141592.65.
        c3=Circle(1000)
        self.assertEqual(c3.area(), 3141592.65)

if __name__ == '__main__':

    fptr = open('output.txt', 'w')

    runner = unittest.TextTestRunner(fptr)

    unittest.main(testRunner=runner, exit=False)

    fptr.close()

    with open('output.txt') as fp:
        output_lines = fp.readlines()


    pass_count = [ len(re.findall(r'\.', line)) for line in output_lines if line.startswith('.')
                     and line.endswith('.\n')]

    pass_count = pass_count[0]

    print(str(pass_count))

    doc1 = inspect.getsource(TestCircleArea.test_circlearea_with_random_numeric_radius)
    doc2 = inspect.getsource(TestCircleArea.test_circlearea_with_min_radius)
    doc3 = inspect.getsource(TestCircleArea.test_circlearea_with_max_radius)

    assert1_count = len(re.findall(r'assertEqual', doc1))

    print(str(assert1_count))

    assert1_count = len(re.findall(r'assertEqual', doc2))

    print(str(assert1_count))

    assert1_count = len(re.findall(r'assertEqual', doc3))

    print(str(assert1_count))

Ошибка:

Traceback (most recent call last):
  File "Solution.py", line 61, in <module>
    pass_count = pass_count[0]
IndexError: list index out of range

Пожалуйста, помогите, что случилось.

1 Ответ

0 голосов
/ 28 января 2020

Я только что изменил метод init , и он работал для меня в ранге хакера.

Кружок класса:

def __init__(self, radius):
    # Define the initialization method below
    pattern=re.compile("^\\-?[0-9]")
    if(pattern.math(str(radius))):
        if(radius>=0 and radius<=1000):
            self.radius=radius
        else:
            raise ValueError("radius must be between 0 and 1000 inclusive")
    else:
        raise TypeError("radius must be a number")

def area(self):
    # Define the area functionality below
    return math.pi*(self.radius**2)
def circumference(self):
    return 2*math.pi*self.radius
    # Define the circumference functionality below
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...