Assert.AreEqual falha enquanto não deve

Eu tenho um comportamento muito estranho que não posso explicar.

Eu tenho a seguinte classe:

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

    public virtual string Name { get; set; }
}

E um método que retorna umProject objeto:

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

        return project;
    }
}

Eu adicionei um teste de unidade para testar oGetByName método:

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

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

    Assert.AreEqual<Project>(expected, actual);
}

Mas quando eu executo o teste de unidade ele falha ao comparar o tipo dos dois objetos com o seguinte erro:

Assert.AreEqual falhou. Esperado: <MyProject.NHibernate.Project>. Real: <MyProject.NHibernate.Project>.

Por que a afirmação está falhando?

Não éAssert.AreEqual afirmando apenas as propriedades dos objetos?

De acordo com a documentação:

Método Assert.AreEqual (Object, Object)

Verifica se dois objetos especificados são iguais. A declaração falhará se os objetos não forem iguais.

Método Assert.AreSame

Verifica se as variáveis ​​de objeto especificadas se referem ao mesmo objeto.

questionAnswers(4)

yourAnswerToTheQuestion