在Python中使用鼻子进行单元测试

时间:2020-03-17 18:15:37

标签: unit-testing nose

很长一段时间以来,我一直在试图解决这个问题,但是我想错了,我无法识别错误。

问题:

定义具有以下规范的类“ ”:

  • 定义类方法“ init ”,该方法将初始化具有属性“ radius”的圆,但具有以下限制:
    • 半径”必须为数字值。如果不是,请使用错误消息“ radius必须为数字”引发TypeError。
    • 半径”必须在0到1000之间(包括两端)。如果不是,请引发ValueError并显示错误消息“半径必须在0到1000之间(含0和1000)”。
  • 定义类方法“ area ”,该方法计算圆的面积,并返回四舍五入到小数点后两位的值。提示:利用“数学”模块中的“ pi”值。
  • 定义类方法“ circumference ”,该方法计算圆的周长,并返回四舍五入到小数点后两位的值。提示:利用“数学”模块中的“ pi”值。

定义鼻子测试类“ TestingCircleCreation ”,该类通过以下测试来测试“ __ init __ ”方法的行为:

  • 定义鼻子测试方法“ test_creating_circle_with_numeric_radius ”,该方法创建半径为2.5的圆,并检查其半径值为2.5。
  • 定义鼻子测试方法“ test_creating_circle_with_negative_radius ”,该方法在创建半径为-2.5的圆时,检查是否引发ValueError异常并显示错误消息“半径必须在0到1000之间(包括0和1000之间)”。 。提示:使用assert_raises和。
  • 定义鼻子测试方法“ test_creating_circle_with_greaterthan_radius ”,该方法在创建半径为1000.1的圆时,检查是否引发了ValueError异常并显示错误消息“半径必须在0到1000之间(包括0和1000之间)”。提示:使用assert_raises和
  • 定义鼻子测试方法“ test_creating_circle_with_nonnumeric_radius ”,该方法在创建半径为“ hello”的圆时,检查是否引发TypeError异常并显示错误消息“ radius must be a number”。提示:使用assert_raises和。

我已经尝试过,但是显示错误。

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')

1 个答案:

答案 0 :(得分:0)

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的圆,然后检查其是否相等。其他方法根本不需要。因此,您将无法执行异常部分。尝试上面的代码。