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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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 当测试未引发预期的异常时,如何显示错误消息?_Python_Unit Testing_Exception - Fatal编程技术网

Python 当测试未引发预期的异常时,如何显示错误消息?

Python 当测试未引发预期的异常时,如何显示错误消息?,python,unit-testing,exception,Python,Unit Testing,Exception,我是python新手。我想测试我的代码是否引发异常。我从这里得到了密码: 现在,如果没有抛出异常,我还想显示一条消息。我该怎么做?python文档没有明确提到它。我在“强制_参数”之后添加了消息,但失败了 编辑:我尝试了修改后的第一个答案,但出现了一个异常。我犯了什么错 import unittest def sayHelloTo(name): print("Hello " + name) class MyTestCase(unittest.TestCase): def te

我是python新手。我想测试我的代码是否引发异常。我从这里得到了密码:

现在,如果没有抛出异常,我还想显示一条消息。我该怎么做?python文档没有明确提到它。我在“强制_参数”之后添加了消息,但失败了

编辑:我尝试了修改后的第一个答案,但出现了一个异常。我犯了什么错

import unittest

def sayHelloTo(name):
    print("Hello " + name)

class MyTestCase(unittest.TestCase):
    def test1(self):
        person = "John"
        with self.assertRaises(Exception, "My insightful message"):
            sayHelloTo(person)
错误:

Error
Traceback (most recent call last):
  File "C:\tests\tester.py", line 9, in test1
    with self.assertRaises(Exception, "My insightful message"):
AttributeError: __exit__
从python 3.3开始,可以用作上下文管理器,并显示以下消息:

import unittest

def sayHelloTo(name):
    print("Hello " + name)

class MyTestCase(unittest.TestCase):
    def test1(self):
        person = "John"
        with self.assertRaises(Exception, msg="My insightful message"):
            sayHelloTo(person)

if __name__ == "__main__":
    unittest.main()
导致

Hello John
F
======================================================================
FAIL: test1 (__main__.MyTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "r.py", line 10, in test1
    sayHelloTo(person)
AssertionError: Exception not raised : My insightful message

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (failures=1)
从python 3.3开始,可以用作上下文管理器,并显示以下消息:

import unittest

def sayHelloTo(name):
    print("Hello " + name)

class MyTestCase(unittest.TestCase):
    def test1(self):
        person = "John"
        with self.assertRaises(Exception, msg="My insightful message"):
            sayHelloTo(person)

if __name__ == "__main__":
    unittest.main()
导致

Hello John
F
======================================================================
FAIL: test1 (__main__.MyTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "r.py", line 10, in test1
    sayHelloTo(person)
AssertionError: Exception not raised : My insightful message

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (failures=1)
现在,如果没有抛出异常,我还想显示一条消息。我该怎么做

unittest的一般理念是测试成功时保持沉默,失败时才变得冗长。因此,API为不成功的案例提供了“msg”关键字参数,但没有为成功的案例提供替代方案

也就是说,哲学的另一部分对你有利。通常,当测试用例失败时,测试用例会在内部引发异常。这意味着,如果要在成功时显示消息,只需在测试后添加另一条语句:

with self.assertRaises(TypeError, msg='Oh no, I did not get a TypeError')
     somecode()
logging.info('Yippee, we got a TypeError!')  # Runs after a successful test
现在,如果没有抛出异常,我还想显示一条消息。我该怎么做

unittest的一般理念是测试成功时保持沉默,失败时才变得冗长。因此,API为不成功的案例提供了“msg”关键字参数,但没有为成功的案例提供替代方案

也就是说,哲学的另一部分对你有利。通常,当测试用例失败时,测试用例会在内部引发异常。这意味着,如果要在成功时显示消息,只需在测试后添加另一条语句:

with self.assertRaises(TypeError, msg='Oh no, I did not get a TypeError')
     somecode()
logging.info('Yippee, we got a TypeError!')  # Runs after a successful test

我尝试了你的代码,但出现了一个错误。请查看我将在问题正文中添加的编辑。@t谢谢。现在可以了。你能告诉我为什么在你传递了这样的信息后,它开始工作吗
msg=“My insightful message”
?是什么促使你这么想的?文档提到了一个“msg参数”,但我没有仔细阅读它,意识到它是一个关键字参数,而不是位置参数。另一个用户unutbu指出了我的错误,这使它正常工作。当测试期间出现另一个异常时,这不起作用。你知道如何在出现不同的异常时仍然发布“见解深刻”的消息吗?我尝试了你的代码,但出现了一个错误。请查看我将在问题正文中添加的编辑。@t谢谢。现在可以了。你能告诉我为什么在你传递了这样的信息后,它开始工作吗
msg=“My insightful message”
?是什么促使你这么想的?文档提到了一个“msg参数”,但我没有仔细阅读它,意识到它是一个关键字参数,而不是位置参数。另一个用户unutbu指出了我的错误,这使它正常工作。当测试期间出现另一个异常时,这不起作用。知道如何在引发不同的异常时仍然发布“见解深刻”的消息吗?
raise
将通过异常,而
print
将打印消息。将这两者结合起来以获得所需的行为。
引发
将通过异常,而
打印
将打印消息。将这两者结合起来,以获得您想要的行为。