NUnit测试用于设置位置C#

时间:2017-11-27 10:26:42

标签: c# unit-testing nunit tdd

所以我正在创建一个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可能已经更新,甚至更难,例如expectedXresultX相等。

有没有人知道如何测试这个?如果x和y坐标都不相等,你可以做某种Assert.AreNotEqual检查吗?

感谢任何帮助!

1 个答案:

答案 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;
}