Zol*_*iqa 9 c# ienumerable moq mocking
我正在使用Moq,我有以下界面:
public interface IGameBoard : IEnumerable<PieceType>
{
...
}
public class GameBoardNodeFactory
{
public virtual GameBoardNode Create (int row, int column, IGameBoard gameBoard)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有这样的测试:
var clonedGameBoardMock = new Mock<IGameBoard> (MockBehavior.Loose);
var gameBoardNodeFactoryMock = new Mock<GameBoardNodeFactory> ();
gameBoardNodeFactoryMock.Setup (x =>
x.Create (
position.Row,
position.Column,
clonedGameBoardMock.Object)).Returns (new GameBoardNode { Row = position.Row, Column = position.Column });
Run Code Online (Sandbox Code Playgroud)
但是然后gameBoardNodeFactoryMock.Object.Create(position.Row,position.Column,clonedGameBoardMock.Object)抛出NullReferenceException.我试图为IGameBoard创建一个模拟,这样它就不会扩展IEnumerable <PieceType>接口,然后它就可以了.
任何帮助表示赞赏.
Dan*_*ant 12
如果要调用GetEnumerator(),则需要为其创建一个Setup.就像是:
var mockPieces = new List<PieceType>;
clonedGameBoardMock.Setup(g => g.GetEnumerator()).Returns(mockPieces.GetEnumerator());
Run Code Online (Sandbox Code Playgroud)
请注意在这种情况下是否存在问题,但值得注意的是您是否需要模拟IEnumerable<T>.
| 归档时间: |
|
| 查看次数: |
4463 次 |
| 最近记录: |