У меня есть класс, содержащий (один или несколько ...) двойников . Например:
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);
И он продолжал бы расти, если бы класс становится больше ...
Итак, мой вопрос
Как лучше всего протестировать этот класс?