C#/ XNAゲームプロジェクトの単体テスト


13

私はプログラミングを始めてからゲーム開発に挑戦してきましたが、決して真剣にはなりませんでした。私はビジネスアプリ開発者として働いていますが、暇なときにいくつかのゲームに取り組んでいます。

(Microsft web-devスタック上の)ビジネスの世界では、ASP.NET MVCは、インターフェイスの動作方法の単体テストが容易なため、非常に人気が高まっています。

すべてのゲームロジックを簡単に単体テストできるゲームを作成するために、どのデザインパターン(MVC、MVP、MVVMなど)を使用できるのか疑問に思っています。これは可能ですか?時間を無駄にしていますか?完全なビルドを行ってから、単体テストの代わりに「統合」タイプのテストを実行する方が良いでしょうか?

サンプルコードは素晴らしいものですが、説明も役立ちます。

(ユニットテストタグを追加しようとしましたが、必要な担当者がいません...)

回答:


17

以下に、機能を簡単に再利用できるだけでなく、単体テストをはるかに容易にするための機能を分離するためのアーキテクチャについて説明した、良い記事を示します。

http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

一部のゲームでは、MVCのようなパターンが役立ちます。チェスやカードゲームなどのボードゲームが思い浮かびます。ただし、ほとんどの場合、これは大規模なやり過ぎです。

個人的には、本質的にアルゴリズム的なものを単体テストするだけで十分だと思います。ゲームプレイコードを記述しているときに「ただ動作する」ために依存するもので、そうでない場合は問題を追跡するのは知らないうちに難しくなる可能性があります。交差点テストやネットワークコードなど。

(理想的にはサードパーティのフレームワークに組み込まれるものなので、それらを書いたりテストしたりする必要はありません!)

ゲーム関連の単体テストに使用したいテクニックの1つは、「視覚的な単体テスト」と呼ばれるものです。基本的な概念は、問題のコードのビットの単純なラインレンダリング(たとえば、交差関数など)、および入力を操作するための基本的なキーまたはマウスの割り当てです。ユニットテストを自動化する必要があると言う人はいません。ユニットテストを個別のユニットに分解してテストするだけです。


いい答えです。私もその記事を正確に投稿したかった。ゲームオブジェクトコンポーネントシステムは、ロジックを分離し、これらを個別に単体テストできる優れた方法です。ただし、単体テストで実行できないのは、ランダムな順序でリアルタイムで相互作用するゲームロジックの複数のパスの複雑な相互作用です。それは天気予報を単体テストしようとするようなものです。:)
LearnCocos2D

ええ、特定の機能を分離する小さなテスターも作っています。APIなどに加えた変更は必ず確認し、常に機能するようにします。次のプロジェクトで機能を再利用するのがはるかに簡単です。
イアン

3
はい、良い答えです、そして私はリンクが好きです。そして、私は最後の行までのすべてに同意しました、「誰もユニットテストを自動化する必要があるとは言いませんでした」。:) 持っている、とそうでないかもしれない-しかし、すべて私きた読み取りがあることを意味(あるいはあからさま言う)ユニットテストをすべき自動化することがあなただけのテストをすべて実行するために、単一のボタンを押してポイントに、。そうしないと、テストの実行により多くの作業が含まれるほど、十分な頻度でテストを実行する可能性が低くなります。確かに、表示コードについて話している場合、可能な場合でも単体テストははるかに困難です。
サイクロプス

ほぼ4年が経ち、「視覚的な単体テスト」がなぜうまく機能するのかをよりよく理解したと感じています。単体テストは開発ツールです。典型的な自動化された単体テストで、何か壊れていることわかります。ただし、視覚的な単体テストを使用すると、非常に複雑なアルゴリズムを調べて何かが壊れている理由すばやく特定することができます(特にライブコード編集と組み合わせる場合)。多くの場合、ビジュアルテストでは、コードを使用てテストするために予測する必要がある問題や、「正しい」答えがない問題(チューニングなど)を特定できます。
アンドリューラッセル14年

そして、ユニットテストを「十分に」実行する必要があるという考えは(常に、自動化された方法で)偽りです。変更されないコードは明らかに再テストする必要はありません。また、コード変更されている場合、変更を行う開発者は、適切な利用可能なテスト(視覚的、コードベース、またはその他)を利用しながら変更を行う必要があります。明らかに、自動テストが価値のある時間投資である特定のリスクプロファイルを持つコードが存在します。しかし、このようなシナリオはゲーム開発では特にまれです。
アンドリューラッセル14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.