2011-04-08 76 views
1

我是新來的XNA遊戲開發人員,我剛開始寫一個小型的3D遊戲。我寫了幾個單元測試來測試我的代碼,但是我遇到了一個問題。當我想單元測試需要訪問模型的模塊時,我還沒有找到一種方法來創建一個用於加載模型的ContentManager。在適當的遊戲中,ContentManager由框架提供。在我的單元測試中,我必須自己創建它,但我不知道如何執行此操作。在單元測試中訪問XNA ContentManager?

加載的替代方法使用ContentManager的模型將以編程方式創建模型對象,但看起來相當乏味。另一種方法是使用Moq來模擬模型,但似乎同樣乏味。

還有其他人遇到過這個問題並解決了嗎?

回答

2

XNA項目的單元測試是一個常見問題,經常被討論。通常,問題是由於需要訪問Game,GraphicsDevice或(在你的情況下)ContentManager的實例,並且沒有任何簡單的方法來獲取它。

您可以看到相關討論here,herehere

我相信普遍接受的做法是重新評估您試圖測試的內容,看看您是否真的需要這些引用,或者您是否可以找到解決方法。

如果這樣做失敗了,測試用例是否可以被測試覆蓋?

如果上述都不適用,由於父類/接口對它們的要求,嘲笑這些對象可能相當困難,但我聽說過有人這樣做。我也聽說可以用一種不可見的形式來創建一個GraphicsDevice,但我自己並沒有這樣做。

對於我自己的測試,我沒有去測試任何圖形元素(繪圖,資源加載等)。它確實在我的代碼覆蓋面上留下了一些空白,但花了幾天的時間尋找解決這個問題的方法,但沒有找到任何答案後,我決定測試我的庫函數(這些函數完成了我的大部分工作項目無論如何)已經足夠好了。

+0

不幸的是,這是我找到的最好的解決方案。 – Nate 2011-04-08 18:40:08