A new year with a new release of Fluent Assertions
New Features
- Introduced a new set of extension methods for asserting that events were raised with the appropriate data. With his permission, I borrowed, adapted and integrated the code from Mendelt Siebenga’s original EMo project. I’ll write up a separate post on how to use this in Silverlight testing.
- BeOfType<T>() and BeAssignableTo<T>() are available for all reference types. Before this, they were only available on the ObjectAssertions class.
- Added an OnlyContain() method to the collection assertions that takes a lambda expression and ensures that the collection only contains items matching the predicate.
- Added an overload of Contain() to the collection assertions that takes both an IEnumerable<T> and a params array. I regularly ran into the situation that I wanted to check if a particular new item was added to a collection. With this overload, you no longer need to create a temporary list that contains both the original collection and the newly added items.
- Added support for ShouldHave().SharedProperties().EqualTo(otherObject). This saved me a lot of work when asserting that some DTO-entity conversion was implemented correctly. Before I had to exclude all the properties that I didn’t want to include in the DTO, or swap the calling order, neither improving the readability. But since you still may end up wanting to exclude a particular property, I also added an additional But(x => x.Property) method that can be combined with AllProperties() and SharedProperties().
Breaking Changes
- Changed the way test framework assemblies are found so that they are not relying on specific versions anymore. In fact, I introduced separate versions for .NET 3.5 and .NET 4.0 that both support all test frameworks. They will automatically find the test framework assembly, but you can force it using an <appSetting>.
- Switched to Silverlight 4 for the Silverlight version of Fluent Assertions.
- Renamed the Assertions base-class to ReferenceTypeAssertions because it better explains its purpose.
- BeOfType<T>() was not properly checking that the subject was of the exact same type rather than a subclass. I fixed this, but it may break existing unit tests.
Improvements/Bugs
- Signed all assemblies with a strong name.
- Added some missing XML comments.
- Improved the extensibility by exposing the subject-under-test via a public Subject property and making all contructors protected.
- If the exception message is shorter than the expected one specified using WithMessage(), but starts with the same text, it was not detected as a difference.
- Fixed a NullReferenceException when calling ObjectAssertions().Be() on a null object.
- As<T>() uses a type safe-cast now so that you can do stuff like someObject.As<SomeType>().ShouldNotBeNull();
- Fixed a bug that caused the property comparison assertions to ignore internal or base-class properties.
Leave a Comment