2013-05-14 51 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