Как сравнить два объекта в модульном тесте? - PullRequest
42 голосов
/ 12 января 2010
public class Student
{
    public string Name { get; set; }
    public int ID { get; set; }
}

...

var st1 = new Student
{
    ID = 20,
    Name = "ligaoren",
};

var st2 = new Student
{
    ID = 20,
    Name = "ligaoren",
};

Assert.AreEqual<Student>(st1, st2);// How to Compare two object in Unit test?

Как сравнить две коллекции в Unitest?

Ответы [ 15 ]

1 голос
/ 09 января 2015

Вы также можете использовать NFluent с синтаксисом this для глубокого сравнения двух объектов без реализации равенства для ваших объектов. NFluent - это библиотека, которая пытается упростить написание читаемого тестового кода.

Check.That(actual).HasFieldsWithSameValues(expected);

Этот метод с ошибкой, с исключением, содержащим все различия, а не с первым. Я считаю эту функцию плюсом.

0 голосов
/ 11 июля 2017

Если вы используете NUnit, вы можете использовать этот синтаксис и указать IEqualityComparer специально для теста:

[Test]
public void CompareObjectsTest()
{
    ClassType object1 = ...;
    ClassType object2 = ...;
    Assert.That( object1, Is.EqualTo( object2 ).Using( new MyComparer() ) );
}

private class MyComparer : IEqualityComparer<ClassType>
{
    public bool Equals( ClassType x, ClassType y )
    {
        return ....
    }

    public int GetHashCode( ClassType obj )
    {
        return obj.GetHashCode();
    }
}

См. Также здесь: Равное ограничение (NUnit 2.4 / 2.5)

0 голосов
/ 27 июня 2017
obj1.ToString().Equals(obj2.ToString())
0 голосов
/ 05 марта 2015

Вот что я делаю:

public static void AreEqualXYZ_UsageExample()
{
    AreEqualXYZ(actual: class1UnderTest, 
        expectedBoolExample: true, 
        class2Assert: class2 => Assert.IsNotNull(class2), 
        class3Assert: class3 => Assert.AreEqual(42, class3.AnswerToEverything));
}

public static void AreEqualXYZ(Class1 actual,
    bool expectedBoolExample,
    Action<Class2> class2Assert,
    Action<Class3> class3Assert)
{
    Assert.AreEqual(actual.BoolExample, expectedBoolExample);

    class2Assert(actual.Class2Property);
    class3Assert(actual.Class3Property);
}

НТН ..

0 голосов
/ 12 января 2010

Может быть, вам нужно добавить public bool Equals(object o) в класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...