我需要在python中使用单元测试编写测试用例,以测试圈子的创建。
使用方法init定义一个Circle类,该方法使用以下方法初始化cicle 属性半径,具有以下限制。
- 半径必须为数字值,如果不是,则引发类型错误,并显示错误消息“半径必须为数字”。
- 半径两边都必须在0到1000之间(含0和1000),如果没有提高数值,则会显示错误消息“半径必须在0到1000之间 1000含”
- 定义类方法的区域和周长,必须将其值四舍五入到小数点后两位。
完成类TestingCircleCircumference的定义,其中 按照以下说明测试圆周法的行为。
定义测试方法test_circlecircum_with_random_numerical_radius 它创建半径为2.5的圆c1并检查其计算结果 周长匹配值15.71
定义测试方法test_circlecircum_with__min_radius其中 创建半径为0的圆c2并检查其计算结果 周长匹配值0
定义测试方法test_circlecircum_with_max_radius其中 创建半径为1000的圆c3并检查其计算结果 周长匹配值6283.19
我的代码是:
import inspect
import re
import unittest
import math
class Circle:
def __init__(self, radius):
try:
if not isinstance(radius, (int, float)):
raise TypeError
elif 1000 >=radius>=0:
self.radius=radius
else:
raise ValueError
except ValueError:
raise ValueError("radius must be between 0 and 1000 inclusive")
except TypeError:
raise TypeError("radius must be a number")
def area(self):
y=math.pi*(self.radius**2)
return round(y,2)
def circumference(self):
x=math.pi*2*self.radius
return round(x,2)
class TestCircleArea(unittest.TestCase):
def test_circlearea_with_random_numeric_radius(self):
c1 = Circle(2.5)
self.assertEqual(c1.area(), 19.63)
def test_circlearea_with_min_radius(self):
c2 = Circle(0)
self.assertEqual(c2.area(), 0)
def test_circlearea_with_max_radius(self):
c3= Circle(1000.1)
self.assertEqual(c3.area(), 3141592.65)
以下代码是系统生成的。我无法对其进行编辑。我只能更改以上代码>。此代码来自HACKERRANK。
如果名称 =='主要':
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 "main.py", line 75, in <module>
pass_count = pass_count[0]
IndexError: list index out of range
答案 0 :(得分:0)
我可以使用下面的类和“测试类方法”解决给定的问题。
班级圈子:
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<0 or self.radius>1000:
raise ValueError("radius must be between 0 and 1000 inclusive")
else:
pass
def area(self):
# Define the area functionality below
return round(math.pi*(self.radius**2),2)
def circumference(self):
# Define the circumference functionality below
return round(2*math.pi*self.radius,2)
TestCircleCircumference(unittest.TestCase)类:
def test_circlecircum_with_random_numeric_radius(self):
# Define a circle 'c1' with radius 2.5 and check if
# it's circumference is 15.71
c1 = Circle(2.5)
self.assertEqual(c1.circumference(),15.71)
def test_circlecircum_with_min_radius(self):
# Define a circle 'c2' with radius 0 and check if
# it's circumference is 0.
c2 = Circle(0)
self.assertEqual(c2.circumference(),0)
def test_circlecircum_with_max_radius(self):
# Define a circle 'c3' with radius 1000 and check if
# it's circumference is 6283.19.
c3 = Circle(1000)
self.assertEqual(c3.circumference(),6283.19)
答案 1 :(得分:0)
只需修改以下代码:
这只是跳过默认的令人烦恼的事情。
答案 2 :(得分:0)
由于在 init 方法中添加了条件,因此未初始化C3的值,因此出现错误。
如果要初始化1000.1,请删除它
班级圈子:
def __init__(self, radius):
self.radius=radius
def area(self):
return round((math.pi*(self.radius)**2),2)
def circumference(self):
return round((math.pi*(self.radius)*2),2)
c3的另一件事是3142221.0,不是您要测试的值,请打印并检查一次。
TestCircleArea类(unittest.TestCase):
def test_circlearea_with_random_numeric_radius(self):
c1=Circle(2.5)
self.assertEqual(c1.area(),19.63)
def test_circlearea_with_min_radius(self):
c2=Circle(0)
self.assertEqual(c2.area(),0.0)
def test_circlearea_with_max_radius(self):
c3=Circle(1000.1)
#print(c3.area())
self.assertEqual(c3.area(),3142221.0)
我希望这能解决您的问题。
答案 3 :(得分:0)
def test_circlearea_with_max_radius(self):
c3 = Circle(1000)
#print(c3.area())
self.assertEqual(c3.area(), 3141592.65)
我确认这工作正常。数字是 1000,而不是 1000.1。输入建议似乎有问题。
答案 4 :(得分:0)
类圆:
def __init__(self, radius):
self.radius = 0
if not isinstance(radius,(int,float)):
raise TypeError("radius must be a number")
elif radius < 0 or radius > 1000:
raise ValueError("radius must be between 0 and 1000 inclusive")
else:
self.radius = radius
def area(self):
return round(math.pi*(self.radius**2),2)
def circumference(self):
return round((math.pi*self.radius*2),2)
class TestCircleArea(unittest.TestCase):
def test_circlearea_with_random_numeric_radius(self):
c1 = Circle(2.5)
self.assertEqual(c1.area(), 19.63)
def test_circlearea_with_min_radius(self):
c2 = Circle(0)
self.assertEqual(c2.area(), 0)
def test_circlearea_with_max_radius(self):
c3 = Circle(1000)
self.assertEqual(c3.area(), 3141592.65)