【问题标题】:Test: this test falls测试:本次测试失败
【发布时间】:2020-04-19 17:21:11
【问题描述】:

我有这个:

namespace metric_system {

  public class Meter {

    public double meter { get; set; }

    public static Meter operator + ( Meter lhs, Meter rhs ) {
        return new Meter { meter = (lhs.meter + rhs.meter) };
    }
  }
}

我正在尝试测试这段代码:

namespace metric_system.Tests {
  public class Tests {
    [SetUp]
    public void Setup () {}

    [Test]
    public void Meter_operator_plus_Meter_10_Meter_50_return_60 () {

      metric_system.Meter m1        = new Meter { meter = 10 };
      metric_system.Meter m2        = new Meter { meter = 50 };
      metric_system.Meter expected  = new Meter { meter = 60 };


      metric_system.Meter actual = new Meter { meter = ( m1.meter + m2.meter) };

      Assert.AreEqual( expected, actual );
    }
  }
}

这个测试失败..帮助我。 Код падает на тесте этот ассерт принимает только объекты, пробывал подсовывать объекты не работает..

【问题讨论】:

  • 你需要重写EqualsGetHashCode,实现IEquatable或者使用结构体而不是类
  • 正如@vc74所说你需要覆盖,这里是一个例子stackoverflow.com/a/61167207/2946329stackoverflow.com/a/38434457/2946329
  • 您的actual 变量应设置为m1 + m2,这就是在Meter 类中定义+ 运算符的全部意义所在。您想测试重载的+ 运算符。

标签: c#


【解决方案1】:

要使Assert.AreEqual(expected, actual) 工作,您需要实现相等比较(或创建相等比较器):

namespace metric_system {

    public class Meter : IEquatable<Meter> {

        public double meter { get; set; }

        public static Meter operator + ( Meter lhs, Meter rhs ) {
            return new Meter { meter = (lhs.meter + rhs.meter) };
        }

        public override bool Equals(object other) => Equals(other as Meter);

        public bool Equals(Meter other) => !(other is null) &&
                                            (other.meter == meter);

        public override int GetHashCode() => HashCode.Combine(meter);
    }
}

此外,如果您将meter 设为不可变,则您的实体将quality for a struct

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多