public void DescribeGroupsResponse() { var response1 = new DescribeGroupsResponse { Details = new[] { new DescribeGroupsResponseDetail { GroupId = Guid.NewGuid().ToString(), State = Guid.NewGuid().ToString(), ProtocolType = Guid.NewGuid().ToString(), Protocol = Guid.NewGuid().ToString(), Members = new [] { new DescribeGroupsResponseMember { MemberId = Guid.NewGuid().ToString(), ClientId = Guid.NewGuid().ToString(), ClientHost = Guid.NewGuid().ToString(), MemberMetadata = new JoinGroupMemberMetadata(), MemberAssignment = new SyncGroupMemberAssignment(), } } } } }; Stream binary1 = new MemoryStream(); response1.Serialize(binary1); binary1.Seek(0L, SeekOrigin.Begin); var response2 = new DescribeGroupsResponse(); response2.Deserialize(binary1); var compareLogic = new CompareLogic(); var result = compareLogic.Compare(response1, response2); Assert.True(result.AreEqual); Stream binary2 = new MemoryStream(); response2.Serialize(binary2); Assert.Equal(binary1.Length, binary2.Length); using (var stream1 = new MemoryStream()) using (var stream2 = new MemoryStream()) { binary1.Seek(0L, SeekOrigin.Begin); binary1.CopyTo(stream1); binary2.Seek(0L, SeekOrigin.Begin); binary2.CopyTo(stream2); Assert.Equal(stream1.Length, stream2.Length); stream1.Seek(0L, SeekOrigin.Begin); var bytes1 = stream1.ToArray(); stream2.Seek(0L, SeekOrigin.Begin); var bytes2 = stream2.ToArray(); Assert.Equal(bytes1.Length, bytes2.Length); for (int i = 0; i < bytes1.Length; i++) { Assert.Equal(bytes1[i], bytes2[i]); } } }