所以我正在创建一个Snake游戏,并希望测试“Snake-food”在“吃掉”时会发生变化Position
。
所以我有一个简单的位置类看起来像这样:
public class Position
{
public int XCoordinate {get; set;}
public int YCoordinate {get; set;}
public Position(int x, int y)
{
XCoordinate = x;
YCoordinate = y;
}
}
在测试中,我希望看到食物的位置在吃的时候更新。因为似乎没有比较对象的好方法,所以我用Assert这样做(简化方法):
[Test]
public void AssertFoodSpawnsOnNewLocationWhenEaten()
{
int expectedX = _sut.Food.Pos.XCoordinate;
int expectedY = _sut.Food.Pos.YCoordinate;
_sut.FeedSnake();
int resultX = _sut.Food.Pos.XCoordinate;
int resultY = _sut.Food.Pos.YCoordinate;
Assert.AreNotEqual(expectedX, resultX);
Assert.AreNotEqual(expectedY, resultY);
}
意识到我的解决方案很糟糕,因为Food-Position可能已经更新,甚至更难,例如expectedX
和resultX
相等。
有没有人知道如何测试这个?如果x和y坐标都不相等,你可以做某种Assert.AreNotEqual
检查吗?
感谢任何帮助!
答案 0 :(得分:0)
制作一个单独的私有函数,用于确定x和y坐标是否相同。这会检查_sut.FeedSnake()
在吃东西时是否更新食物位置。
[Test]
public void AssertFoodSpawnsOnNewLocationWhenEaten()
{
Position expected = _sut.Food.Pos;
_sut.FeedSnake();
Position result = _sut.Food.Pos;
Assert.False(IsPositionEqual(expected, result));
}
private bool IsPositionEqual(Position Pos1, Position Pos2)
{
if (Pos1.XCoordinate == Pos2.XCoordinate &&
Pos1.YCoordinate == Pos2.YCoordinate)
{
return true;
}
return false;
}