protected void CheckAll <T>(ObjectDeserializationChecker objectDeserializationChecker, params Type[] types) { var objects = new List <object>(); var results = new List <RestoreResult>(); foreach (var type in types.Where(t => !_excludes.Contains(t) && typeof(T).IsAssignableFrom(t))) { try { var constructedType = type; var createMethodInfo = typeof(SpecimenFactory).GetMethod(nameof(SpecimenFactory.Create), new[] { typeof(ISpecimenBuilder) }) .MakeGenericMethod(constructedType); var obj = createMethodInfo.Invoke(null, new object[] { Fixture }); objects.Add(obj); } catch (Exception ex) { results.Add(RestoreResult.Error(type, ex)); } } results.AddRange(RestoreAll(objectDeserializationChecker, objects.ToArray())); CheckResults(results.ToArray()); }
protected static RestoreResult[] RestoreAll(ObjectDeserializationChecker checker, params object[] objects) { var restoreResults = new List <RestoreResult>(); foreach (var obj in objects) { try { restoreResults.Add(checker.IsRestorable(obj, out string difference) ? RestoreResult.Ok(obj.GetType()) : RestoreResult.Diff(obj.GetType(), difference)); } catch (Exception ex) { restoreResults.Add(RestoreResult.Error(obj.GetType(), ex)); } } return(restoreResults.ToArray()); }