动态模拟对象设置方法,参数为 return
Mock object setup method with arguments to return dynamically
我有一个 class 位置,我想测试方法 CreatePosition。方法如下所示:
public Position CreatePosition(int horizontalIndex, int verticalIndex)
{
return new Position(horizontalIndex, verticalIndex);
}
接口位置:
public interface IPosition
{
char HorizontalPosition { get; }
int VerticalPosition { get; }
int IndexHorizontal { get; }
int IndexVertical { get; }
Position CreatePosition(int horizontalIndex, int verticalIndex);
}
此处使用方法 CreatePosition,它是动态的 - 对于每对参数,它都会创建新的 Position:
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( ?? );
我想伪造该方法,使其接受动态参数和 return 动态结果,就像真正的 Position 所做的那样。可以这样做吗?
也许在你的测试方法中是这样的:
positionCreator
.Setup(x => x.CreatePosition(It.IsAny<int>, It.IsAny<int>))
.Returns(new Position(givenHorizontalIndex, givenVerticalIndex));
并且您可以拥有具有不同输入和预期输出的各种测试用例。
或者您想要更精细的东西,您可以在 [SetUp]
方法中将其全部连接起来,比如给定输入,return 输出?
我有一个 class 位置,我想测试方法 CreatePosition。方法如下所示:
public Position CreatePosition(int horizontalIndex, int verticalIndex)
{
return new Position(horizontalIndex, verticalIndex);
}
接口位置:
public interface IPosition
{
char HorizontalPosition { get; }
int VerticalPosition { get; }
int IndexHorizontal { get; }
int IndexVertical { get; }
Position CreatePosition(int horizontalIndex, int verticalIndex);
}
此处使用方法 CreatePosition,它是动态的 - 对于每对参数,它都会创建新的 Position:
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( ?? );
我想伪造该方法,使其接受动态参数和 return 动态结果,就像真正的 Position 所做的那样。可以这样做吗?
也许在你的测试方法中是这样的:
positionCreator
.Setup(x => x.CreatePosition(It.IsAny<int>, It.IsAny<int>))
.Returns(new Position(givenHorizontalIndex, givenVerticalIndex));
并且您可以拥有具有不同输入和预期输出的各种测试用例。
或者您想要更精细的东西,您可以在 [SetUp]
方法中将其全部连接起来,比如给定输入,return 输出?