我是Python的新手,在Python中使用模仿还是有问题。
我的生产代码如下所示:
from stompest.config import StompConfig
from stompest.sync import Stomp
class Connector:
def sendMessage(self):
message = {'message'}
dest = '/queue/foo'
def _send(self, message='', dest=''):
config = StompConfig(uri="tcp://localhost:61613")
client = Stomp(config)
client.connect()
client.send(body=message, destination=dest,
headers='')
client.disconnect()
如您所见,我想使用Stomp协议发送消息。我的测试我想测试一下,当我从Connector类调用send方法时,从Stompest库调用send方法将仅被调用一次。
我的单元测试如下:
from Connector import Connector
import unittest
from mockito import *
import stompest
from stompest.config import StompConfig
from stompest.sync import Stomp
class test_Connector(unittest.TestCase):
def test_shouldInvokeConnectMethod(self):
stomp_config = StompConfig(uri="tcp://localhost:61613")
mock_stomp = mock(Stomp(stomp_config))
connector = Connector()
connector.sendMessage()
verify(mock_stomp, times=1).connect()
当我在调试模式下运行测试时,我看到实例connect()的方法被调用,方法也被发送,但是作为测试的结果,我得到了:
Failure
Traceback (most recent call last):
File "C:\development\systemtest_repo\robot_libraries\test_Connector.py", line 16, in test_shouldInvokeConnectMethod
verify(mock_stomp, times=1).connect()
File "C:\Python27\lib\site-packages\mockito\invocation.py", line 111, in __call__
verification.verify(self, len(matched_invocations))
File "C:\Python27\lib\site-packages\mockito\verification.py", line 63, in verify
raise VerificationError("\nWanted but not invoked: %s" % (invocation))
VerificationError:
Wanted but not invoked: connect()
我做错什么了?
您实际上并没有connect
在模拟对象上调用该方法-您只需检查它是否已被调用即可。这也是错误所说明的Wanted but not invoked: connect()
。也许在呼叫mock_stomp.connect()
之前将呼叫添加到verify
可以解决此问题:
mock_stomp = mock(Stomp(stomp_config))
# call the connect method first...
mock_stomp.connect()
connector = Connector()
connector.sendMessage()
# ...then check it was called
verify(mock_stomp, times=1).connect()
如果您改为尝试检查是否从调用了模拟程序Connector
,则可能至少需要mock_stomp
通过依赖注入来传递对象。例如
class Connector:
def __init__(self, stomp):
self.stomp = stomp
def sendMessage(self, msg):
self.stomp.connect()
# etc ...
并在您的测试中
mock_stomp = mock(Stomp(stomp_config))
connector = Connector(mock_stomp)
connector.sendMessage()
verify(mock_stomp, times=1).connect()
否则,我看不到如何在断言所基于connect()
的同一实例上调用该方法mock_stomp
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句