unit-testing - 在 python 中使用鼻子进行单元测试
问题描述
我一直在尝试解决这个问题很长时间,但是我认为我在某个地方出错了,我无法识别错误。
问题 :
定义一个具有以下规范的类' Circle ':
- 定义类方法' init ',它用属性'radius'初始化一个圆,有以下限制:
- “半径”必须是数值。如果不是,则使用错误消息“半径必须是数字”引发 TypeError。
- “半径”必须介于 0 和 1000 之间,包括两边。如果不是,则使用错误消息“半径必须介于 0 和 1000 之间”引发 ValueError。
- 定义类方法' area ',它计算圆的面积,并返回四舍五入到小数点后2位的值。提示:利用“math”模块中的“pi”值。
- 定义类方法' circum ',它计算圆的周长,并返回四舍五入到小数点后2位的值。提示:利用“math”模块中的“pi”值。
定义一个鼻子测试类“ TestingCircleCreation ”,它使用以下测试测试“ __init__ ”方法的行为:
- 定义一个鼻子测试方法' test_creating_circle_with_numeric_radius ',它创建一个半径为2.5的圆,并检查它的半径值是否为2.5。
- 定义一个鼻子测试方法' test_creating_circle_with_negative_radius ',它检查是否引发 ValueError 异常并显示错误消息“半径必须介于 0 和 1000 之间”,同时创建一个半径为 -2.5 的圆。提示:使用 assert_raises 和 with。
- 定义一个鼻子测试方法' test_creating_circle_with_greaterthan_radius ',它检查是否引发 ValueError 异常,并显示错误消息 "radius must be between 0 and 1000 inclusive" ,同时创建半径为 1000.1 的圆。提示:使用 assert_raises 和 with
- 定义一个鼻子测试方法' test_creating_circle_with_nonnumeric_radius ',在创建半径为 'hello' 的圆时检查是否引发 TypeError 异常并显示错误消息“radius must be a number”。提示:使用 assert_raises 和 with。
我已经尝试过了,但它显示错误。
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 TestingCircleCreation:
def test_creating_circle_with_numeric_radius(self):
c1=Circle(2.5)
assert c1.radius==2.5
def test_creating_circle_with_negative_radius(self):
c1=Circle(2.5)
assert c1.radius==2.5
with assert_raises(ValueError):
Circle(-2.5)
def test_creating_circle_with_greaterthan_radius(self):
c1=Circle(2.5)
assert c1.radius==2.5
with assert_raises(ValueError):
Circle(1000.1)
def test_creating_circle_with_nonnumeric_radius(self):
c1=Circle(2.5)
assert c1.radius==2.5
with assert_raises(TypeError):
Circle('hello')
解决方案
class TestingCircleCreation:
def test_creating_circle_with_numeric_radius(self):
c1=Circle(2.5)
assert c1.radius==2.5
def test_creating_circle_with_negative_radius(self):
with assert_raises(ValueError):
Circle(-2.5)
def test_creating_circle_with_greaterthan_radius(self):
with assert_raises(ValueError):
Circle(1000.1)
def test_creating_circle_with_nonnumeric_radius(self):
with assert_raises(TypeError):
Circle('hello')
您在每种方法中再次创建一个半径为 2.5 的圆,然后检查它是否相等。这根本不需要其他方法。因此,您无法执行异常部分。试试上面的代码。
推荐阅读
- reactjs - 如何将数组中的4个元素(对象)添加到本地存储,反应
- python - 我想知道为什么函数总是选择第一个以及如何修复它-Python
- php - 如何获取选定的下拉列表项的值并将其发布到控制器?
- react-native-navigation - 使用 RNN 库重置堆栈
- android - 从 Google Play 商店安装应用程序后如何打开特定活动以获取深层链接
- javascript - 如何将 javascript 文件插入到我的 IE-11 的 BHO 扩展中?我想插入一个多行的 javascript 文件
- bash - 如何在同一行附加标准错误
- c# - SeleniumExtras.WaitHelpers.ExpectedConditions
- docker - Tomcat docker 容器日志在几个小时后挂起
- docker - Jenkins docker 容器总是添加 cat 命令