我正在针对api进行多个单元测试。测试使用@patch模拟api调用。我希望创建的某些测试应触发异常。如何在单元测试中处理?
这是我到目前为止所拥有的。 Pylint抱怨assertTrue()语句。我确信有更好的方法来处理异常。
@patch('myapi.myapi.requests.request')
def test_auth_failure(self, mock_request):
# Configure the request mock to return an auth failure
# Auth/login (/session) failures return status 200, but without a token!
mock_request.return_value.status_code = 200
mock_request.return_value.content = json.dumps(self.mock_auth_failure)
try:
# Call auth()
self.api.auth()
# Exception should have been raised
self.assertTrue(False)
except exceptions.HTTPUnauthorized:
# Exception caught
self.assertTrue(True)
其他信息:这是从unittest.TestCase扩展的类。示例:
class MyApiTests(unittest.TestCase):
答案 0 :(得分:1)
如果您的类(定义了 test_auth_failure 方法)扩展了unittest.TestCase
,则应使用[Python 3.Docs]: unittest - assertRaises(exception, callable, *args, **kwds):
将您的 try / except 子句替换为:
with self.assertRaises(exceptions.HTTPUnauthorized):
self.api.auth()
或
self.assertRaises(exceptions.HTTPUnauthorized, self.api.auth)
答案 1 :(得分:0)
如果您正在使用pytest,则可以使用该功能...
import pytest
def test_zero_division():
with pytest.raises(ZeroDivisionError):
1 / 0
https://docs.pytest.org/en/latest/assert.html#assertions-about-expected-exceptions