2013-05-14 24 views
0

我正在VS2012中使用NSubstitute進行測試,並試圖將模型轉換爲列表,或者我可以計算的東西。下面的代碼:在MVC測試中將模型轉換爲列表

[TestMethod] 
    public void StartedGame() 
    { 
     // arrange 
     var repo = Substitute.For<IGameRepository>(); 
     IEnumerable<Game> expectedGames = new List<Game> 
      { 
       new Game{ gameTypeID = 1, hasStarted = false, ID = 1, isOver = false, isPublic = true, maxPlayers = 2, someoneReported = false}, 
       new Game{ gameTypeID = 1, hasStarted = false, ID = 2, isOver = false, isPublic = true, maxPlayers = 2, someoneReported = false}, 
       new Game{ gameTypeID = 2, hasStarted = false, ID = 3, isOver = false, isPublic = true, maxPlayers = 2, someoneReported = false}, 
       new Game{ gameTypeID = 2, hasStarted = false, ID = 4, isOver = false, isPublic = true, maxPlayers = 2, someoneReported = false}, 
       new Game{ gameTypeID = 1, hasStarted = false, ID = 5, isOver = false, isPublic = true, maxPlayers = 2, someoneReported = false} 
      }; 
     repo.GetGames().Returns(expectedGames); 
     var sut = new GameController(repo); 

     // act 
     var actual = sut.GameMenuStart(); 
     // assert 
     //Assert.IsInstanceOfType(actual, typeof(ViewResult)); 
     var viewResult = actual as ViewResult; 

     Assert.IsNotNull(viewResult); 
    } 

當我調試,我可以將鼠標懸停在「的ViewResult」看型號,有我看到的條目與「計數」,但我怎麼能達到呢?我試圖鑄造「遊戲」的對象,像這樣:

Game[] theModel = (Game[])viewResult.Model; 

並列出多,但總是失敗。 任何想法?

編輯:的ViewResult的類型爲:System.Web.Mvc.ViewResult

下面是代碼的這個函數內的其餘部分:

 var repo = Substitute.For<IGameRepository>(); 
     IEnumerable<Game> expectedGames = new List<Game> 
      { 
       new Game{ gameTypeID = 1, hasStarted = false, ID = 1, isOver = false, isPublic = true, maxPlayers = 2, someoneReported = false}, 
       new Game{ gameTypeID = 1, hasStarted = false, ID = 2, isOver = false, isPublic = true, maxPlayers = 2, someoneReported = false}, 
       new Game{ gameTypeID = 2, hasStarted = false, ID = 3, isOver = false, isPublic = true, maxPlayers = 2, someoneReported = false}, 
       new Game{ gameTypeID = 2, hasStarted = false, ID = 4, isOver = false, isPublic = true, maxPlayers = 2, someoneReported = false}, 
       new Game{ gameTypeID = 1, hasStarted = false, ID = 5, isOver = false, isPublic = true, maxPlayers = 2, someoneReported = false} 
      }; 
     repo.GetGames().Returns(expectedGames); 
     var sut = new GameController(repo); 

回答

1

var theList = viewResult.Model as IEnumerable<Game>;

這並獲得成功的簽名。

0

因爲它是一個IEnumerable,你可以只使用「ToArray」方法,如果你想它是一個數組。

Game[] theModel = viewResult.ToArray(); 

但是,.Count應該只是工作?

,我們可以看到 「repo.GetGames()

+0

我已經添加了更多,以及viewResult的類型。它不包含'ToArray()'擴展名。 – Mappan 2013-05-14 17:43:02