尝试创建一个测试来测试python 2.7.5中的平方根方法
编程新手,如果这是一个基本问题,请道歉。 我正在创建一个功能正常的计算器,需要能够对其进行测试,以确保其正常工作。到目前为止,一切运行正常,但当我尝试测试平方根方法时,遇到以下错误: AssertionError:未引发ValueError 这是我的密码:尝试创建一个测试来测试python 2.7.5中的平方根方法,python,unit-testing,calculator,Python,Unit Testing,Calculator,编程新手,如果这是一个基本问题,请道歉。 我正在创建一个功能正常的计算器,需要能够对其进行测试,以确保其正常工作。到目前为止,一切运行正常,但当我尝试测试平方根方法时,遇到以下错误: AssertionError:未引发ValueError 这是我的密码: 我不知道为什么它没有引起值错误,因为我已经指定了上面的数字类型。我还有几个其他的计算器函数,它们都顺利通过了,但我无法理解这一个。非常感谢您的帮助。谢谢发生此错误是因为您有两个可能的输入错误,它们是不同的,但作为相同的异常处理,ValueE
我不知道为什么它没有引起值错误,因为我已经指定了上面的数字类型。我还有几个其他的计算器函数,它们都顺利通过了,但我无法理解这一个。非常感谢您的帮助。谢谢发生此错误是因为您有两个可能的输入错误,它们是不同的,但作为相同的异常处理,
ValueError
。如果运行sqrt(-4)
,将得到ValueError
异常。无论哪种方式,都会为输入的'two'
引发异常,因为它不是数字类型。然后调用except
子句,它将返回'nan'
,覆盖异常的返回,因为Python认为您已经处理了异常。实际上有两个不同的错误:输入在平方根运算域之外的数学错误和输入不是数字类型的数据类型错误。我将使用以下代码来处理它,该代码使用一个自定义异常和两个except
子句来区分这两种情况:
import unittest
class DataError(Exception):
pass
class Calculator(object):
def square_root(self, x):
from math import sqrt
number_types = (int, float, complex, long)
try:
if isinstance(x, number_types):
return sqrt(x)
else:
raise DataError("Not a numeric type")
except ValueError:
return "nan"
except DataError:
raise
class TestCalculator(unittest.TestCase):
def setUp(self):
self.calc = Calculator()
def test_to_see_square_root_works_ok(self):
self.assertEqual(2, self.calc.square_root(4))
self.assertEqual(0, self.calc.square_root(0))
self.assertEqual("nan", self.calc.square_root(-4))
def test_calculator_returns_error_message_if_x_arg_is_not_number(self):
self.assertRaises(DataError, self.calc.square_root, [self, 'two$
if __name__ == '__main__':
unittest.main()
或者,作为替代,假设您的用户知道不取负数的平方根,只处理ValueError
,因为'two'不是数字
import unittest
class DataError(Exception):
pass
class Calculator(object):
def square_root(self, x):
from math import sqrt
number_types = (int, float, complex, long)
try:
if isinstance(x, number_types):
return sqrt(x)
else:
raise DataError("Not a numeric type")
except ValueError:
return "nan"
except DataError:
raise
class TestCalculator(unittest.TestCase):
def setUp(self):
self.calc = Calculator()
def test_to_see_square_root_works_ok(self):
self.assertEqual(2, self.calc.square_root(4))
self.assertEqual(0, self.calc.square_root(0))
self.assertEqual("nan", self.calc.square_root(-4))
def test_calculator_returns_error_message_if_x_arg_is_not_number(self):
self.assertRaises(DataError, self.calc.square_root, [self, 'two$
if __name__ == '__main__':
unittest.main()