public static void ShouldMatchApproved(this string actual, Func <string> customMessage, Action <ShouldMatchConfigurationBuilder> configureOptions) { var configurationBuilder = new ShouldMatchConfigurationBuilder(new ShouldMatchConfiguration { StringCompareOptions = StringCompareShould.IgnoreLineEndings, FileExtension = "txt" }); configureOptions(configurationBuilder); var config = configurationBuilder.Build(); if (config.Scrubber != null) { actual = config.Scrubber(actual); } var approvalFileFolder = config.ApprovalFileFolder; if (!Directory.Exists(approvalFileFolder)) { Directory.CreateDirectory(approvalFileFolder); } var approvedFile = Path.Combine(approvalFileFolder, $"{config.Name}{config.FilenameDescriminator}.approved.{config.FileExtension}"); var receivedFile = Path.Combine(approvalFileFolder, $"{config.Name}{config.FilenameDescriminator}.received.{config.FileExtension}"); File.WriteAllText(receivedFile, actual); if (!File.Exists(approvedFile)) { if (DiffTools.ShouldOpenDiffTool()) { DiffTools.GetDiffTool().Open(receivedFile, approvedFile, false); } throw new ShouldMatchApprovedException($@"Approval file {approvedFile} does not exist", receivedFile, approvedFile); } try { var approvedFileContents = File.ReadAllText(approvedFile); var receivedFileContents = File.ReadAllText(receivedFile); receivedFileContents.ShouldBe(approvedFileContents, config.StringCompareOptions); if (File.Exists(receivedFile)) { File.Delete(receivedFile); } } catch (Exception) { if (DiffTools.ShouldOpenDiffTool()) { DiffTools.GetDiffTool().Open(receivedFile, approvedFile, true); } throw; } }