簡體   English   中英

單元測試XNA:我需要模擬我的GraphicsDevice

[英]Unit testing XNA: Do I need to Mock my GraphicsDevice

我在使用XNA框架。
為了幫助我,我做了一個看起來像這樣的幫助類:

ActorHolder
+ SpriteBatch (SpriteBatch)
+ ContentManager (ContentManager)
- drawables (IList<IDrawable>)
- updatables (IList<IUpdatable>)

+ ActorHolder(GraphicsDevice, ContentManager)
+ Draw(GameTime)
+ Update(GameTime)
+ AddActor(IActor)
+ RemoveActor(IActor)
+ GetCollidingActors(IActor)

現在我想對這個班級進行單元測試。 但正如您所看到的,我的構造函數需要一個圖形設備和一個內容管理器。 雖然我認為這在我的應用程序中很明顯,但在我的測試中卻沒有。
我應該嘲笑這兩個只是為了進行單元測試還是我的設計存在缺陷?

--UPDATE--
我找到了一個可能有用的項目鏈接: http//scurvytest.codeplex.com/沒有任何xp,因為編碼必須為社交生活騰出一些空間。

- 注意 -
對不起,我的UML法語,我的公司不使用它,所以我從來沒有使用它,除了回到學校。

我通過在不可見的窗口上實際創建一個真實的圖形設備來“嘲弄”圖形設備。 性能出奇的好 - 大約1500次測試需要12秒。

它允許我測試需要圖形設備的代碼並進行一些基本驗證(例如,是正確的紋理集,是否選擇了頂點緩沖區等)。 這可以通過使用帶有DirectX Debug Runtime的參考光柵化器來進行更密集的檢查來改進。

如果我需要驗證發送到圖形設備的內容,我創建了一個接口,通過該接口,被測代碼可以發送頂點 - 然后可以使用標准模擬對象框架輕松模擬。

有關模擬XNA圖形設備依賴類的另一個討論,請查看此問題: 模擬Texture2D

以下是我使用真實圖形設備“模擬”的類: MockedGraphicsDeviceService.csMockedGraphicsDeviceService.Test.cs

(編輯:修復斷開的鏈接)

這似乎是一個非常有效的模擬使用場景。 我不認為這個設計存在缺陷 -

存在模擬的一個原因是幫助填充在測試時不可用的接口的資源需求,例如遠程對象,或者在您的情況下,圖形資源。 對我來說,模擬圖形設備和內容管理器似乎是合適的。

正如我從其他問題中發現的那樣,GraphicsDevice不能掉以輕心。 這個討論在特定的XNA社區論壇指出,為什么不嘲笑這一點是一個好主意。

我仍在尋找一個很好的解決方案。 但是,我傾向於認為:

  • 這是我的架構中的設計缺陷(我應該更多地分離我的組件)
  • 這是XNA的設計缺陷

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM