1

皆さん!

Ruby 開発は初めてで、この言語を使用した最初のプロジェクトに取り組んでいます。私の友人と話し合ったとき、私は最初の実際のプロジェクトにテスト駆動開発アプローチを使用していますが、早い段階で少し障害にぶつかりました。

私のプロジェクトの主な目的は、Source-Engine 専用のゲーム サーバーを処理することです。実際のサーバーに依存してテストを行うのではなく、モッキングについてよく知りません。と。

私の質問は次のとおりです。サーバーへの応答の送信をテストし、正しい応答を返す必要がある場合、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あること、およびそのソケットから応答を取得する必要があることを認識している必要があります。

should_receive期待値は rspec に、 の呼び出しによりソケットが の引数を持つauthentication_engine.issue_challenge_requestメソッドへの呼び出しを受信する必要があり、これが発生した場合は期待される応答で応答する必要があることを伝えます。send_requestchallenge_requestexpected_response

これは、この方法で依存関係を注入できるモジュール式の方法でコードを作成することを前提としています。

利用可能なさまざまな rspec の期待に関するいくつかのチュートリアルを実行することは、おそらく有利です。

于 2013-10-10T13:54:53.447 に答える