1

伙计们!

我是 Ruby 开发的新手,我正在使用该语言开发我的第一个项目。在与我的朋友讨论后,我在我的第一个实际项目中使用了测试驱动开发方法,并且我在早期遇到了一些障碍。

我的项目的主要目的是处理 Source-Engine 专用游戏服务器,而我对 mocking 不太了解,这是我应该做的事情,而不是我的测试依赖于周围的实际服务器来测试东西和。

所以我的问题是:当我需要测试向服务器发送响应并获得正确的响应时,我应该如何模拟 UDP 服务器?

例如,当参考本文档时:https ://developer.valvesoftware.com/wiki/Server_queries#A2S_SERVERQUERY_GETCHALLENGE

给定一个挑战请求,我想测试挑战号的获取。我有点不确定如何进行。

任何帮助将不胜感激并且非常有用。如果我要完成这件事,我想在第一时间把事情做好,而不是养成任何我以后不得不改掉的坏习惯。

4

1 回答 1

1

这是一些伪代码,可以帮助您入门

describe 'I should get a challenge response when sending a request' do
    socket = mock('UDPSocket').as_null_object

    challenge_request = [0xFF, 0xFF, 0xFF, 0xFF, 0x57]
    expected_response = [0xFF, 0xFF, 0xFF, 0xFF, 0x41, 0x4B, 0xA1, 0xD5, 0x22]

    socket.should_receive(:send_request).with(challenge_request).and_respond_with(expected_response)

    authentication_engine = new AuthenticationEngine(socket)
    authentication_engine.issue_challenge_request
end

其要点是,您正在定义预期的请求和响应应该是什么,创建一个模拟 UDP 套接字,您可以将其注入任何将发送挑战并期望响应的内容,然后调用发出该挑战的功能。

authentication_engine应该知道它需要通过它的 发送一个质询请求,socket并且它需要从该套接字获得响应。

期望告诉 rspec的should_receive调用authentication_engine.issue_challenge_request应该导致套接字接收到send_request带有参数的方法的调用,challenge_request并且如果发生这种情况,它应该以预期的响应进行响应expected_response

这假设您以模块化方式编写代码,允许您以这种方式注入依赖项。

阅读一些关于您可用的各种 rspec 期望的教程可能对您有利。

于 2013-10-10T13:54:53.447 回答