Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试创建一个测试来测试python 2.7.5中的平方根方法_Python_Unit Testing_Calculator - Fatal编程技术网

尝试创建一个测试来测试python 2.7.5中的平方根方法

尝试创建一个测试来测试python 2.7.5中的平方根方法,python,unit-testing,calculator,Python,Unit Testing,Calculator,编程新手,如果这是一个基本问题,请道歉。 我正在创建一个功能正常的计算器,需要能够对其进行测试,以确保其正常工作。到目前为止,一切运行正常,但当我尝试测试平方根方法时,遇到以下错误: AssertionError:未引发ValueError 这是我的密码: 我不知道为什么它没有引起值错误,因为我已经指定了上面的数字类型。我还有几个其他的计算器函数,它们都顺利通过了,但我无法理解这一个。非常感谢您的帮助。谢谢发生此错误是因为您有两个可能的输入错误,它们是不同的,但作为相同的异常处理,ValueE

编程新手,如果这是一个基本问题,请道歉。 我正在创建一个功能正常的计算器,需要能够对其进行测试,以确保其正常工作。到目前为止,一切运行正常,但当我尝试测试平方根方法时,遇到以下错误:

AssertionError:未引发ValueError

这是我的密码:

我不知道为什么它没有引起值错误,因为我已经指定了上面的数字类型。我还有几个其他的计算器函数,它们都顺利通过了,但我无法理解这一个。非常感谢您的帮助。谢谢

发生此错误是因为您有两个可能的输入错误,它们是不同的,但作为相同的异常处理,
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()