The main advantage of using Fluent Assertions is that your unit tests will be more readable and less error-prone. He thinks about how he can write code to be easy to read and understand. Note that, if there are tests that dont have these modifiers, then you still have to assert them using the explicit assert. Fluent comes with a number of different extensions depending on the data types you are testing against, there are extensions for string, int, bool, exceptions, collections, GUID, dates etc.. more information about the extensions can be found here. As a developer, I have acquired a wealth of experience and knowledge in C#, software architecture, unit testing, DevOps, and Azure. FluentAssertions is a library that improves unit tests by providing better failure messages, simplifies assertions in many scenarios, and provides a fluent interface (which improves code readability). FluentAssertions adds many helpful ways of comparing data in order to check for "equality" beyond a simple direct comparison (for example check for equivalence across types, across collections, automatically converting types, ignoring elements of types, using fuzzy matching for dates and more). FluentAssertions walks the object graph and asserts the values for each property. Fluent Assertions is a NuGet package that I've been using consistently on my projects for about 6 years. It will make reading your unit tests a little bit easier. how much of the Invocation type should be made public? Moq also includes a "Verify" feature. Perhaps it's best to think about redesign InvocationCollection first to a cleaner, more solid design that adheres to the usual .NET collection patterns better; perhaps then it would be ready to be exposed without an additional interface. Download free 30-day trial. The Return methods could be marked internal and the Arguments property changed to IReadOnlyList