我有一个课程职位,我想测试方法CreatePosition。方法如下所示:
public Position CreatePosition(int horizontalIndex, int verticalIndex)
{
return new Position(horizontalIndex, verticalIndex);
}
界面IPosition:
public interface IPosition
{
char HorizontalPosition { get; }
int VerticalPosition { get; }
int IndexHorizontal { get; }
int IndexVertical { get; }
Position CreatePosition(int horizontalIndex, int verticalIndex);
}
方法CreatePosition在这里使用,它是动态的 - 对于每对参数,它创建新的位置:
private void AddToAllowedPositions(IPosition positionCreator)
{
int horizontalIndex = piece.Position.IndexHorizontal;
int verticalIndex = piece.Position.IndexVertical;
while(IndexesAreValid(horizontalIndex, verticalIndex)
{
IPosition currentPosition = positionCreator.CreatePosition(horizontalIndex, verticalIndex);
allowedPosition.Add(currentPosition);
}
}
我的问题是我不知道如何假冒方法CreatePosition。
我已经像这样创建了Mock<IPosition>
:
Mock<IPosition> positionCreator = new Mock<IPosition>();
positionCreator.Setup(positionCreator.Object.CreatePosition(?, ?)).Returns( ?? );
我想伪造那个方法,所以它会接受动态参数并返回动态结果,就像真正的Position正在做的那样。有可能这样做吗?
答案 0 :(得分:2)
在您的测试方法中可能是这样的:
positionCreator
.Setup(x => x.CreatePosition(It.IsAny<int>, It.IsAny<int>))
.Returns(new Position(givenHorizontalIndex, givenVerticalIndex));
你可以拥有不同输入和预期输出的各种测试用例。
或者您是否想要更精细的内容,您可以在[SetUp]
方法中将其全部连接起来,就像输入一样,返回输出?