Класс модульного тестирования с doubles

У меня есть класс, содержащий (один или несколько ...) двойников . Например:

public class TestFloatClass{
 public double Double1{get;set;}
 public double Double2{get;set;}

 public void SetDoubleByCalculation(double value){
  Double1 = //Some calculations here;
  Double2 = //Some calculations here;
 } 
}

Я хочу протестировать метод SetDoubleByCalculation (double value) , поэтому я начинаю писать модульные тесты.

TestFloatClass expected = new TestFloatClass();
expected.Double1 = 100.10;
expected.Double2 = 200.24554;

TestFloatClass actual = new TestFloatClass();
actual.SetDoubleByCalculation(Math.PI); //Just using something random here.

В данном случае ожидалось. Double1 и фактическое. Double1 примерно одинаковы. Но не совсем из-за точности с плавающей запятой.

Однако я не уверен, как это правильно провести модульное тестирование. Это то, что я пробовал до сих пор.

Включение определенной дельты в оператор равенства

Моя первая интуиция подсказывала, ну, просто включите логику в оператор равенства следующим образом:

public override bool Equals(object obj){
  return Math.Abs(this.Double1 - obj.Double1) <= 0.00001 &&
              Math.Abs(this.Double1 - obj.Double1)  <= 0.00001; 
}

Но как сказано в этом Тема с двойной точностью реализации хэш-кода , это просто практика.

Просто используя переопределение Assert

, я могу продолжить, протестировав его следующим образом:

Assert.Equals(expected.Double1, actual.Double1, 0.0000001); //Or just some precision
Assert.Equals(expected.Double2, acutal.Double2, 0.0000001);

Но опять же, тогда у меня есть сделать это для КАЖДОЙ собственности в этом классе. Если бы TestFloatClass также имел два свойства VeryComplicatedClass vcc и int integer , то мне пришлось бы добавить их тоже.

Assert.Equals(expected.Double1, actual.Double1, 0.0000001); //Or just some precision
Assert.Equals(expected.Double2, actual.Double2, 0.0000001);
Assert.Equals(expected.vcc, actual.vcc);
Assert.Equals(expected.integer, actual.integer);

И он продолжал бы расти, если бы класс становится больше ...

Итак, мой вопрос

Как лучше всего протестировать этот класс?

6
задан Community 23 May 2017 в 11:52
поделиться