unit-testing - 單元測試範例 - vs2017單元測試




自動測試遊戲 (7)

你將如何去添加自動化測試遊戲?

我相信你可以單元測試很多遊戲引擎的功能(網絡,對象創建,內存管理等),但是有可能自動測試實際的遊戲本身嗎?

我不是在討論遊戲元素(就像Protoss會在地圖X中擊敗虫族),但是我正在談論遊戲和引擎之間的交互。

介紹

在遊戲開發中,引擎只是遊戲的一個平台。 你可以把遊戲引擎想像成一個操作系統,把遊戲看作是操作系統運行的一個軟件。 遊戲可以是遊戲引擎中的腳本或實際子程序的集合。

可能的答案

我的想法是這樣的:

你需要一個確定性的引擎。 這意味著給定一組輸入,輸出將完全相同。 這將包括隨機發生器被接種相同的輸入。

然後,創建一個包含頭像/用戶可以與之交互的幾個對象的裸骨骼級別。 從小處開始,隨著更多交互的發展,將對象添加到關卡中。

創建一個遵循路徑的腳本(測試尋路)並與不同的對象交互(存儲結果或期望的行為)。 這個腳本將是你的自動化測試。 經過一定的時間(比如一周)後,運行腳本以及引擎的單元測試。


在開發的遊戲玩法方面,數值是如此隨機的,所以測試絕對值是一個非常遙不可及的想法

但是我們可以測試確定性的值。 例如,一個單位測試可能會讓Guybrush Threepwood移向一個門(尋路),打開門(使用命令),失敗,因為他的庫存中沒有鑰匙(反饋),選擇鑰匙(尋路+庫存管理),然後最後開門。

所有這些路徑都是確定性的。 通過這個單元測試,我可以重構內存管理器,如果它以某種方式打破了庫存管理例程,那麼單元測試就會失敗。

這只是遊戲中單元測試的一個想法。 我想知道其他的想法,因此,這個職位的動機。


如果你正在測試渲染引擎,我想你可以渲染特定的測試場景,做一個屏幕截圖並將其與參考測試渲染進行比較。 這樣你就可以檢測到引擎中的變化是否在視覺上破壞了任何東西。 您可以為聲音引擎編寫類似的測試,甚至可以通過比較一系列幀來製作動畫。

如果你想測試遊戲邏輯或場景進度,你可以通過測試腳本變量的各種條件(假設你正在使用腳本來實現大部分的場景和故事方面)來做到這一點。


這不能真正回答你的問題,但我正在聽微軟的Pex播客,這個解決方案與你提出的解決方案類似,當我聽到它的時候,我記得以為看看是否真的很有趣它將能夠測試遊戲。 我不知道它是否能夠專門幫助你,但也許你可以看看他們使用的一些想法,並將其應用到你的單元測試。


如果你正在使用XNA(當然這個想法可以外推到其他框架),你可以使用遊戲中的單元測試框架,讓你在單元測試中訪問遊戲的狀態。 一個這樣的框架是Scurvy.Test :-)


http://flea.sourceforge.net/gameTestServer.pdf

這是一個有趣的討論,在遊戲中實現一個全面的功能測試。

術語“單元測試”意味著正在測試“單元”。 這是一回事 如果你正在做更高級別的測試(例如同時有多個系統),通常這就是所謂的功能測試。 有可能單位測試大部分的遊戲,但是你不能真正的測試樂趣。

只要你的測試可能是模糊的,決定論就沒有必要了。 例如“角色受傷”而不是“角色失去14.7點生命值”。



另一個答案已經提到了“兩個遊戲內部的力量”的文章,但是我建議閱讀那裡的一切(或幾乎所有的東西),因為它們都寫得很好,可以直接應用到遊戲開發中。 Assert上文章特別好。 您也可以訪問他們以前的網站在遊戲從內部 ,其中有很多寫測試驅動開發 ,這是單元測試採取了極端。

兩個人的力量是實施UnitCpp,一個相當受人重視的單元測試框架。 就個人而言,我更喜歡WinUnit





automated-tests