Самый разумный способ проверить правильность реализации 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 . Объекты, где только одно свойство отличается, чтобы убедиться, что равные работы: < /p>

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

[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#»