# Exception Message Format When a Verify test fails, the exception message is designed to be machine-parsable. This enables tooling (IDE extensions, CI integrations, diff tools) to programmatically extract file paths and take action on verification failures. ## Message Structure The message has two parts: a **file listing** followed by optional **file content**. ### File Listing The first line is always the directory: ``` Directory: /path/to/test/project ``` Then zero or more categorized sections, each listing file pairs: * **New** - a `.received.` file exists with no corresponding `.verified.` file (first test run or new test). * **NotEqual** - both files exist but content differs. * **Delete** - a `.verified.` file exists that is no longer produced by any test. * **Equal** - both files exist and match (included for completeness when other categories are present). ### File Content After the file listing, a `FileContent:` section includes the text content of new and not-equal files. This section is only present when there are text-based new or not-equal files. Binary files are listed in the file listing but their content is not included. ## Example: All Categories ```txt Directory: {ProjectDirectory} New: - Received: MyTests.Test1.received.txt Verified: MyTests.Test1.verified.txt NotEqual: - Received: MyTests.Test2.received.txt Verified: MyTests.Test2.verified.txt Delete: - MyTests.OldTest.verified.txt Equal: - Received: MyTests.Test3.received.txt Verified: MyTests.Test3.verified.txt FileContent: New: Received: MyTests.Test1.received.txt the new content NotEqual: Received: MyTests.Test2.received.txt received text Verified: MyTests.Test2.verified.txt verified text ``` snippet source | anchor ### NotEqual with Comparer Message When a custom comparer provides a message, the content section uses `Compare Result:` instead of inline file content: ```txt Directory: {ProjectDirectory} NotEqual: - Received: MyTests.Test1.received.txt Verified: MyTests.Test1.verified.txt FileContent: NotEqual: Received: MyTests.Test1.received.txt Verified: MyTests.Test1.verified.txt Compare Result: The comparer reported a difference ``` snippet source | anchor ### Content Omission The `FileContent:` section can be suppressed globally: ```cs public static class ModuleInitializer { [ModuleInitializer] public static void Init() => VerifierSettings.OmitContentFromException(); } ``` snippet source | anchor This is useful in CI environments where only the file paths are needed. ## Parsing Exception Messages The [Verify.ExceptionParsing](https://nuget.org/packages/Verify.ExceptionParsing) NuGet package provides a parser for this format. ### Usage ```cs static Result ParseExceptionMessage(string exceptionMessage) { var result = Parser.Parse(exceptionMessage); // result.New: files with no corresponding .verified. file // result.NotEqual: files where .received. differs from .verified. // result.Delete: .verified. files no longer produced by any test // result.Equal: files where .received. matches .verified. foreach (var file in result.NotEqual) { Debug.WriteLine($"Received: {file.Received}"); Debug.WriteLine($"Verified: {file.Verified}"); } return result; } ``` snippet source | anchor The `Result` contains: * `New` - list of `FilePair` (received and verified paths). * `NotEqual` - list of `FilePair`. * `Delete` - list of file paths. * `Equal` - list of `FilePair`. ### Test Framework Prefixes Different test frameworks prepend different prefixes to the exception message. The parser handles these automatically: * **NUnit**: `VerifyException : Directory: ...` * **MSTest**: `Test method ... threw exception:\nVerifyException: Directory: ...` * **Other frameworks**: `Directory: ...`