Skip to content

Exception 'StackOverflowException' has been raised while comparing to complex objects #78

@gedbac

Description

@gedbac

I am getting this exception in 2.2.0 version. Given example in version 2.1.0 works fine.

To reproduce 'StackOverflowException' exception, such code has to be executed:

    public class MyCompany
    {
        public string Name { get; set; }
        public MyCompanyLogo Logo { get; set; }
        public List<MyUser> Users { get; set; }
    }

    public class MyUser
    {
        public string Name { get; set; }
        public MyCompany Company { get; set; }
    }

    public class MyCompanyLogo
    {
        public string Url { get; set; }
        public MyCompany Company { get; set; }
        public MyUser CreatedBy { get; set; }
    }

    [Test]
    public void Test2()
    {
        var company1 = new MyCompany { Name = "Company" };
        var user1 = new MyUser { Name = "User", Company = company1 };
        company1.Users = new List<MyUser> { user1 };
        var logo1 = new MyCompanyLogo { Url = "blank", Company = company1, CreatedBy = user1 };
        company1.Logo = logo1;

        var company2 = new MyCompany { Name = "Company" };
        var user2 = new MyUser { Name = "User", Company = company2 };
        company2.Users = new List<MyUser> { user2 };
        var logo2 = new MyCompanyLogo { Url = "blank", Company = company2, CreatedBy = user2 };
        company2.Logo = logo2;

        company1.ShouldBeEquivalentTo(company2, o => o.IgnoringCyclicReferences());
    }

This exception occurs then cycle reference is in the list and the problem is in the method ObjectReference.Equals.

For example, I am getting such property path:

Logo.Company.Users[0].Company.Users[0].Company.Users[0].Company.Users[0].Company.Users[0].Company.Users[0].Company.Users[0].Company.Users[0].Company.Users[0]

Fluent Assertions framework can't not detect that Logo.Company.Users[0] and Logo.Company.Users[0].Company.Users[0] is the same.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions