[英]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.cs , MockedGraphicsDeviceService.Test.cs
(編輯:修復斷開的鏈接)
這似乎是一個非常有效的模擬使用場景。 我不認為這個設計存在缺陷 -
存在模擬的一個原因是幫助填充在測試時不可用的接口的資源需求,例如遠程對象,或者在您的情況下,圖形資源。 對我來說,模擬圖形設備和內容管理器似乎是合適的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.