如何在Python中使用Mockito编写单元测试

用户名

我是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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在python中的不同实现中使用相同的单元测试?

如何在单元测试中使用JSON发送请求

如何使用Mockito为控制器类编写单元测试用例

如何在Mockito的单元测试中模拟LocalCache

如何在单元测试中使用Mockito或任何Mocking框架模拟Guice Injection?

如何模拟要使用JUnit + Mockito进行单元测试的服务中使用的类

如何在Android Studio的单元测试中使用Mockito / Hamcrest

如何在单元测试中使用熊猫数据框

如何在单元测试中使用全局变量?

如何从Visual Studio Code中使用Mocha调试用Typescript编写的单元测试

如何在Python中使用随机种子值对PRNG进行单元测试?

如何使用Chai编写单元化模型的单元测试

如何在Mocha异步单元测试中使用afterEach?

如何在单元测试中使用android依赖项?

如何在单元测试中使用python Mock side_effect充当Class方法

如何在CRM 2011开发中编写单元测试

如何在Grails单元测试中使用VndErrorJsonRenderer

如何在单元测试中使用断言?

如何在单元测试中使用Redis?

如何在Ember单元测试中使用库?

如何在仪器化的单元测试中使用文件

如何在其构造函数中使用CheckedProviders为类编写单元测试

如何在 node 中使用 sinon 为 module.exports 和原型编写单元测试

如何编写单元测试用例以在 Angular 中使用下拉框列表提交表单?

如何使用 Mockito 通过单元测试?

如何在 angular 7 中使用 jasmine 和 karma 编写单元测试用例

如何在 C# 中使用 FromRoute 属性围绕属性编写单元测试

如何在单元测试中使用敏感数据?

使用 JUnit 和 Mockito 编写单元测试