Assert.AreEqual schlägt fehl, obwohl dies nicht der Fall sein sollte

Ich habe ein wirklich komisches Verhalten, das ich nicht erklären kann.

Ich habe folgende Klasse:

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

    public virtual string Name { get; set; }
}

Und eine Methode, die a zurückgibtProject Objekt:

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;
    }
}

Ich habe einen Unit Test hinzugefügt, um das zu testenGetByName Methode:

[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);
}

Wenn ich den Komponententest durchführe, schlägt der Vergleich des Typs der beiden Objekte mit dem folgenden Fehler fehl:

Assert.AreEqual fehlgeschlagen. Erwartet: <MyProject.NHibernate.Project>. Tatsächlich: <MyProject.NHibernate.Project>.

Warum schlägt die Behauptung fehl?

NichtAssert.AreEqual nur auf die Eigenschaften der Objekte behaupten?

Nach der Dokumentation:

Assert.AreEqual-Methode (Objekt, Objekt)

Überprüft, ob zwei angegebene Objekte gleich sind. Die Behauptung schlägt fehl, wenn die Objekte nicht gleich sind.

Assert.AreSame-Methode

Überprüft, ob angegebene Objektvariablen auf dasselbe Objekt verweisen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage