Самый разумный способ проверить правильность реализации IEquatable, если класс имеет много свойств.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Самый разумный способ проверить правильность реализации IEquatable, если класс имеет много свойств.

Сообщение Anonymous »

Предположим, у меня есть класс ComponentDefinitionRoot с IEquatable:

Код: Выделить всё

class ComponentDefinitionRoot: IEquatable
{
public string Id {get; set;}
public string Name {get; set;}
// many more properties...
public virtual bool Equals(ComponentDefinitionRoot? other)
{
if (other is null)
return false;

return Name == other.Name && Id == other.Id //... and so on;
}
}
Допустим, у моего класса есть много свойств и некоторые сложные структуры данных, которые также имеют свои собственные методы Equals.
Я реализовал это, и это работает , но теперь я хочу проверить правильность реализации Equals.
Чтобы по-настоящему охватить все сценарии тестирования, мне нужно написать метод тестирования, который получает множество образцов объектов, отличающихся только одним свойством. чтобы убедиться, что равенство работает:

Код: Выделить всё

[TestMethod]
[DynamicData(nameof(GetTestCases), DynamicDataSourceType.Method)]
public void Equals_AreNotEqual_ReturnsFalse(ComponentDefinitionRoot unequalRoot)
{
var root1 = ComponentDefinitionEntityMother.MakeComponentDefinitionRootA();

bool areEqual = root1.Equals(unequalRoot);

Assert.IsFalse(areEqual);
}
[TestMethod]
public void Equals_AreEqual_ReturnsTrue()
{
var root1 = ComponentDefinitionEntityMother.MakeComponentDefinitionRootA();
var equalToRoot1 = ComponentDefinitionEntityMother.MakeComponentDefinitionRootA();

bool areEqual = root1.Equals(equalToRoot1);

Assert.IsTrue(areEqual);
}
public static IEnumerable GetTestCases()
{
yield return new object[] { NameDifferent() };
yield return new object[] { IdDifferent() };
yield return new object[] { CreatedDateDifferent() };
yield return new object[] { SegmentNameDifferent() };
//and so on...
}
public static ComponentDefinitionRoot NameDifferent()
{
var result = ComponentDefinitionEntityMother.MakeComponentDefinitionRootA();
result.Name = "not equal";
return result;
}
public static ComponentDefinitionRoot IdDifferent()
{
var result = ComponentDefinitionEntityMother.MakeComponentDefinitionRootA();
result.Id = "000000000000000000000002";
return result;
}
public static ComponentDefinitionRoot CreatedDateDifferent()
{
var result = ComponentDefinitionEntityMother.MakeComponentDefinitionRootA();
result.CreatedDate = GeneralMother.GetIndependenceDay();
return result;
}
public static ComponentDefinitionRoot SegmentNameDifferent()
{
var result = ComponentDefinitionEntityMother.MakeComponentDefinitionRootA();
result.Segments.First().Name = "unequal name";
return result;
}
Это очень утомительный подход, и мне кажется, что должен быть лучший способ.

У вас есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -class-has
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»