我在玩一個小遊戲項目,因爲我在TDD方面不是很有經驗,所以我很樂意在幾件事情上得到一些專家意見。TDD和遊戲物理
首先,我很早就意識到TDD對於遊戲開發來說似乎並不理想。看來這個主題的觀點差異很大。我最初沒有受過教育的意見是TDD好像對所有的遊戲邏輯都能很好地工作。我認爲,任何能夠處理視頻輸出和聲音的東西都會被抽象成可視化測試的類。
事情開始順利。目標是創建一個2D天體飛行遊戲(對於那些關心的小行星)。我爲Ship類創建了一系列單元測試。諸如初始化,旋轉之類的東西可以很容易地在一系列測試中使用,比如:GetRotation(),TurnRotateRightOn(),Update(1),GetRotation(),Expect_NE(rotation1,rotation2)。然後我遇到了第一個問題。
我對TDD的理解是,你應該寫測試你認爲應該如何使用這個類。我希望這艘船能夠移動,所以我寫了一個基本上講過的課。 GetCoordinates(),ThrustOn(),Update(1),GetCoordinates()。這很好,以確保船舶移動某處。但是,我很快意識到我必須確保船舶以正確的速度向正確的方向移動。接下來是75線單元測試,我基本上必須初始化旋轉,檢查座標,初始化推力,更新船舶,獲取新座標,檢查新的旋轉。更重要的是,我可以看到沒有必要在遊戲中獲得船的速度(只是座標,船應該更新自己)。正因爲如此,我沒有直接的方法來獲得速度。所以測試基本上必須重新計算速度應該是什麼,所以我可以確保它與更新後得到的座標相匹配。總而言之這是非常混亂,非常耗時,但工作。測試失敗,測試通過等。
這很好,直到後來我意識到我想將船的更新代碼重構爲抽象的「Actor」類。我意識到,儘管Actor的每個子類都需要能夠正確計算新的位置,但並非每個子類都必須以相同的方式更新其速度(有些碰撞,有些不會,有些具有靜態速度)。現在,我基本上面臨着複製和改變巨大而龐大的測試代碼的前景,我不禁想到應該有更好的方法。
有沒有人有處理單元測試這種複雜的黑匣子類型的工作經驗?看起來我基本上不得不在測試中編寫完全相同的物理代碼,所以我知道結果應該是什麼。這似乎是自我挫敗,我確信我錯過了這一切的一切。我非常感謝任何人可以提供的幫助或建議。
這個問題不屬於gamedev SE嗎?他們可以在那裏更好地回答它。 – Spoike
我沒有意識到gamedev SE!我會在未來提出類似的問題。謝謝! – Landon