Phi*_*rke 11 python twisted trial
我正在试图弄清楚如何编写一个试验测试用例,该测试用例会引发异常.
目前我有两种简单的方法来测试(成功和失败).每个方法都返回一个已经回调或错误返回的延迟.测试成功方法很好.在测试失败方法时,我希望能够断言引发了异常(使用assertRaises).
但是测试用例失败了,我得到了:
twisted.trial.unittest.FailTest: ConnectionRefusedError not raised (<Deferred at 0x920e28c current result: <twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionRefusedError'>>> returned)
代码如下:
from twisted.trial.unittest import TestCase
from twisted.internet.defer import inlineCallbacks, succeed, fail
from twisted.internet.error import ConnectionRefusedError
class MyObject:
def success(self):
return succeed(True)
def failure(self):
return fail(ConnectionRefusedError())
class TestErrBack(TestCase):
def setUp(self):
self.o = MyObject()
@inlineCallbacks
def test_success(self):
result = yield self.o.success()
self.assertTrue(result)
@inlineCallbacks
def test_failure(self):
# this test case is failing !
yield self.assertRaises(ConnectionRefusedError, self.o.failure)
我在test_failure中使用正确的方法吗?我可以使用try ...来调用self.o.failure,但我不认为这种方法与使用assertRaises一样好.
Jea*_*one 13
TestCase.assertFailure改为使用:
yield self.assertFailure(self.o.failure(), ConnectionRefusedError)
Run Code Online (Sandbox Code Playgroud)
从Twisted 12.3开始,还有一个TestCase.failureResultOf帮手:
self.failureResultOf(self.o.failure()).trap(ConnectionRefusedError)
Run Code Online (Sandbox Code Playgroud)
从13.1开始,此API需要一个额外的参数并为您执行类型检查:
self.failureResultOf(self.o.failure(), ConnectionRefusedError)
Run Code Online (Sandbox Code Playgroud)
这对于你的测试有用知道的Deferred已经有结果解雇.如果在Deferred调用时没有失败结果,则failureResultOf引发测试失败的异常而不是返回失败.
这适用于您的示例代码,应该适用于大多数单元测试.如果您正在使用试用版编写功能或集成测试,而实际的异步工作正在进行,而您不知道什么时候Deferred会启动,那么您需要坚持使用第一个API , assertFailure.
| 归档时间: |
|
| 查看次数: |
2655 次 |
| 最近记录: |