我正在查看GMock,并试图确定它对于我想做的某些单元测试是否可行。
如果我理解正确,你 Mock 的任何类都必须有一个可以从中创建模拟的接口,并且你想要测试的任何类都必须能够通过注入接受模拟。
到目前为止,我是正确的吗?
如果我是对的,到目前为止,我看不出它将如何帮助我测试使用第三方类的类。
例如:
假设我编写了一个ChatClient
类,在实现它时,我使用Qt库中的QWebSocket
。ChatClient
具有类型为QWebSocket
的成员ChatClient::m_socket
。
现在,GMock 没有接口可以从中创建模拟 websocket,我的聊天客户端也不会通过生产代码中的依赖注入来获取接口。QWebSocket
的工作方式是如此具体,以至于我永远无法使用不同的具体实现。
但是,我确实想测试我的ChatClient
,调用在应该连接时连接,将正确的字节传递给其对QWebSocket::sendBinaryMessage
的调用,正确响应传入的消息等,并且似乎模拟框架会很有用以这种方式测试我的ChatClient
,所以我不必实际连接到网络。
我该怎么办,或者这在C++中是行不通的,就像在其他语言中一样,因为我们没有反思?
我是否只是为第三方类创建自己的接口,每次调用它,将其转发给第三方类,然后让我的ChatClient
使用该接口,即使我永远不会使用另一个具体的实现,只是为了启用测试?
只是为了启用测试"对我来说已经足够了,但我同意如果有很多方法,就会有很多样板......
请参阅静态依赖注入:来自外部类的模拟静态方法(我无法更改!