Assert.AreEqual терпит неудачу, в то время как это не должно

У меня действительно странное поведение, которое я не могу объяснить.

У меня есть следующий класс:

public class Project
{
    public virtual int Id { get; set; }

    public virtual string Name { get; set; }
}

И метод, который возвращаетProject объект:

public Project GetByName(string Name)
{
    using (ISession session = NHibernateHelper.OpenSession())
    {
        Project project = session.CreateCriteria(typeof(Project))
                                 .Add(Restrictions.Eq("Name", Name))
                                 .UniqueResult();

        return project;
    }
}

Я добавил модульный тест для проверкиGetByName метод:

[TestMethod]
public void TestGetByName()
{
    IProjectsRepository projectRepository = new ProjectsRepository();

    var expected = new Project { Id = 1000, Name = "Project1" };
    var actual = projectRepository.GetByName(expected.Name);

    Assert.AreEqual(expected, actual);
}

Но когда я запускаю модульный тест, он не работает при сравнении типа двух объектов со следующей ошибкой:

Assert.AreEqual не удалось. Ожидаемое: <MyProject.NHibernate.Project>, Фактический: <MyProject.NHibernate.Project>.

Почему утверждение неверно?

неAssert.AreEqual утверждая только о свойствах объектов?

Согласно документации:

Метод Assert.AreEqual (Объект, Объект)

Проверяет, что два указанных объекта равны. Утверждение не выполняется, если объекты не равны.

Метод Assert.AreSame

Проверяет, что указанные переменные объекта ссылаются на один и тот же объект.

Ответы на вопрос(4)

Ваш ответ на вопрос