【问题标题】:NUnit Test For Setting Position C#用于设置位置 C# 的 NUnit 测试
【发布时间】:2017-11-27 10:26:42
【问题描述】:

所以我正在创建一个 Snake 游戏并想测试“Snake-food”在“吃掉”时是否会更改 Position

所以我有一个简单的 Position-class,看起来有点像这样:

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 相等。

有没有人告诉我如何测试这个?你能做一些Assert.AreNotEqual检查x坐标和y坐标是否不相等吗?

感谢您的帮助!

【问题讨论】:

  • “因为似乎没有比较对象的好方法”当然,之一:在您的Position 类中覆盖EqualsGetHashCode。这使您能够使用Assert.AreEqual(expected, myInstanceOfPosition)。除此之外,我们不知道如何测试某些东西,即使 expectedXresultX 相等,它也可能会改变。
  • 抱歉,我可能不清楚。 Food-object 获得一个随机生成的位置。我的意思是食物对象的新位置仍然可以具有相同的 x 坐标,但 y 坐标可能不同。
  • @HimBromBeere 你能举一个比较对象的例子吗?
  • 好吧,如果我理解正确的话,你已经确定你的会员不能正常工作,所以你的测试对我来说似乎有点过时了,因为它没有透露任何消息。那么你的问题到底是什么?创建没有重复位置的随机数?
  • @Jesper 这看起来像是一个设计问题。您可能需要重新考虑如何设计职位。

标签: c# unit-testing nunit tdd


【解决方案1】:

制作了一个单独的私有函数,用于确定 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多