c# - 如何模拟扩展 IEnumerable 的接口(interface)

标签 c# mocking ienumerable moq

我正在使用 Moq,我有以下界面:

public interface IGameBoard : IEnumerable<PieceType>
{
    ...  
}
public class GameBoardNodeFactory
{
    public virtual GameBoardNode Create (int row, int column, IGameBoard gameBoard)
    {
        ...
    }
}

然后我有一个这样的测试:

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 });

但随后 gameBoardNodeFactoryMock.Object.Create (position.Row, position.Column, clonedGameBoardMock.Object) 抛出 NullReferenceException。我尝试为 IGameBoard 创建一个模拟,这样它就不会扩展 IEnumerable 接口(interface),然后它就可以工作了。

感谢任何帮助。

最佳答案

如果正在调用,您需要为 GetEnumerator() 创建一个设置。像这样的东西:

var mockPieces = new List<PieceType>;
clonedGameBoardMock.Setup(g => g.GetEnumerator()).Returns(mockPieces.GetEnumerator());

请注意确定这是否是这种情况下的问题,但值得注意的是您是否需要模拟 IEnumerable<T> .

关于c# - 如何模拟扩展 IEnumerable 的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5553582/

相关文章:

c# - 工厂模式在工厂类中实例化类

c# - Post 方法获取空参数 ASP .NET MVC

javascript - 如何在本地环境中模拟 Javascript 中未知的库?

testing - Rust:如何模拟 request::Result?

c# - WebAPI 模型绑定(bind) - [FromUri] 不适用于 Guid 的枚举

c# - 在C#中更有效地播放声音

c# - 时间复杂度——这两种算法中哪一种更快?

python - 在调用参数之一的成员函数时如何对函数进行单元测试

c# - ObservableCollection(IEnumerable) 构造函数的行为

c# - 任何人都可以向我解释 IEnumerable 和 IEnumerator 吗?