【问题标题】:Rotate point test is failing. Why?旋转点测试失败。为什么?
【发布时间】:2017-03-01 10:23:05
【问题描述】:

这是我的 Point.cs 文件失败。

// Rotates the point counter-clockwise by deg degrees.  For example, applying
// a 90 degree rotation to (1, 0) should give (0, 1).
public void rotate(double deg)
{
    double rotCos = Math.Cos(deg * Math.PI / 180);
    double rotSin = Math.Sin(deg * Math.PI / 180);
    double oldX = x;
    double oldY = y;
    x = oldX * rotCos - oldY * rotSin;
    y = oldX * rotSin + oldY * rotCos;
    Point point = new Point(x, y);
}

我运行这个测试并得到结果:

“消息:Assert.AreEqual 失败。预期:。实际:。”

[TestMethod]
public void Rotate_Test()
{
    double rotate = -90;
    double i = 4;
    double o = 2;
    Point point = new Point(i, o);
    double expectedX = 2;
    double expectedY = 4;

    point.rotate(rotate);

    Assert.AreEqual(expectedX, point.getX());
    Assert.AreEqual(expectedY, point.getY());
}

【问题讨论】:

  • 你用你的Point point = new Point(x, y);做什么?它会立即被删除,因为您没有将其分配给任何东西......
  • 我认为它是最终产品。我真正需要的只是 x、y 点。
  • @JayT,提供可用于重现问题的minimal reproducible example
  • @FCin 我删除了那行代码,我仍然得到相同的结果。
  • @Nkosi 我不知道你在说什么......

标签: c# visual-studio unit-testing


【解决方案1】:

双数不是精确的数字。如果没有指定它们之间可接受的差异,则不应比较它们是否相等。

https://msdn.microsoft.com/en-us/library/ms243458.aspx

https://msdn.microsoft.com/en-us/library/ya2zha7s(v=vs.110).aspx

试试

Assert.AreEqual(expectedX, point.getX(), 0.001);

【讨论】:

    猜你喜欢
    • 2018-04-04
    • 2019-04-27
    • 2021-01-28
    • 2021-04-06
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多