public static void ShouldDeepEqual(
            this object actual,
            object expected,
            IComparison comparison,
            IDifferenceFormatterFactory formatterFactory)
        {
            var builder = new ComparisonBuilder();

            comparison       = comparison ?? builder.Create();
            formatterFactory = formatterFactory ?? builder.GetFormatterFactory();

            var context = new ComparisonContext();

            var(result, newContext) = comparison.Compare(context, actual, expected);

            if (result != ComparisonResult.Fail)
            {
                return;
            }

            var message = new DeepEqualExceptionMessageBuilder(newContext, formatterFactory).GetMessage();

            throw new DeepEqualException(message, newContext);
        }
 public DeepEqualExceptionMessageBuilder(IComparisonContext context, IDifferenceFormatterFactory formatterFactory)
 {
     this.context          = context;
     this.formatterFactory = formatterFactory;
 }