{"id":4442,"date":"2026-09-08T12:11:39","date_gmt":"2026-09-08T16:11:39","guid":{"rendered":"https:\/\/xceed.com\/?p=4442"},"modified":"2026-09-14T10:14:48","modified_gmt":"2026-09-14T14:14:48","slug":"blog-fluent-assertions-8-11-whats-new","status":"publish","type":"post","link":"https:\/\/xceed.com\/es\/blog\/releases\/blog-fluent-assertions-8-11-whats-new\/","title":{"rendered":"Fluent Assertions 8.11: Better collection, JSON, string, ValueTask, and custom assertions"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"4442\" class=\"elementor elementor-4442\" wpc-filter-elementor-widget=\"1\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5012a45 e-flex e-con-boxed e-con e-parent\" data-id=\"5012a45\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6013353 elementor-widget elementor-widget-html\" data-id=\"6013353\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div style=\"background:#fff8f4;border:1px solid #f8d7c7;padding:20px 22px;border-radius:14px;margin:24px 0;box-shadow:0 6px 18px rgba(242,101,34,0.08);\">\n  <p style=\"margin:0;line-height:1.7;color:#1f2937;\">Fluent Assertions 8.11 expands the library with new assertions for collections, JSON serialization, multiline strings, and <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">ValueTask<\/span>, while also making custom value-type assertions easier to build.<\/p>\n<\/div>\n\n<p>Fluent Assertions 8.11 expands the library with new assertions for collections, JSON serialization, multiline strings, and <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">ValueTask<\/span>, while also making custom value-type assertions easier to build.<\/p>\n\n<p>The release is particularly useful if your test suite works heavily with <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">System.Text.Json<\/span>, asynchronous APIs, reflection, or collections. It also includes several fixes designed to produce clearer assertion failures instead of unexpected exceptions.<\/p>\n\n<p>Here is what .NET developers should know about Fluent Assertions 8.11.<\/p>\n\n<h2 style=\"margin-top:40px;color:#f26522;\">New collection assertions for subset and superset testing<\/h2>\n\n<p>Fluent Assertions 8.11 adds three collection assertions:<\/p>\n\n<div style=\"background:#fff8f4;border:1px solid #f8d7c7;padding:20px 24px;border-radius:14px;margin:24px 0;box-shadow:0 6px 18px rgba(242,101,34,0.08);\">\n  <ul style=\"padding-left:22px;margin:0;\">\n    <li style=\"margin-bottom:12px;\"><strong>BeSupersetOf:<\/strong> Verifies that every item in the expected collection exists in the actual collection.<\/li>\n    <li style=\"margin-bottom:12px;\"><strong>BeProperSubsetOf:<\/strong> Verifies that the subject is contained within another set while remaining strictly smaller.<\/li>\n    <li><strong>BeProperSupersetOf:<\/strong> Verifies that the subject contains another set and is not simply equal to it.<\/li>\n  <\/ul>\n<\/div>\n\n<p>These assertions make set relationships easier to express directly in tests.<\/p>\n\n<p>Por ejemplo:<\/p>\n\n<div style=\"background:linear-gradient(135deg,#fff4ec 0%,#fffaf7 100%);border:1px solid #f8d7c7;border-left:6px solid #f26522;padding:18px 20px;margin:18px 0;border-radius:14px;box-shadow:0 8px 24px rgba(242,101,34,0.10);\">\n  <h3 style=\"margin:0 0 10px 0;color:#f26522;font-weight:800;\">Using BeSupersetOf<\/h3>\n  <div style=\"margin:0;line-height:1.7;color:#1f2937;background:transparent;border:0;padding:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:0.98em;\">\n    var actual = new[] { 1, 2, 3, 4 };<br\/><br\/>\n    actual.Should().BeSupersetOf(new[] { 2, 3 });\n  <\/div>\n<\/div>\n\n<p>The assertion communicates the intent immediately: every item in the expected collection should exist in the actual collection.<\/p>\n\n<p>A proper superset adds another condition. The collections cannot simply represent the same set.<\/p>\n\n<div style=\"background:linear-gradient(135deg,#fff4ec 0%,#fffaf7 100%);border:1px solid #f8d7c7;border-left:6px solid #f26522;padding:18px 20px;margin:18px 0;border-radius:14px;box-shadow:0 8px 24px rgba(242,101,34,0.10);\">\n  <h3 style=\"margin:0 0 10px 0;color:#f26522;font-weight:800;\">Using BeProperSupersetOf<\/h3>\n  <div style=\"margin:0;line-height:1.7;color:#1f2937;background:transparent;border:0;padding:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:0.98em;\">\n    var actual = new[] { 1, 2, 3, 4 };<br\/><br\/>\n    actual.Should().BeProperSupersetOf(new[] { 1, 2, 3 });\n  <\/div>\n<\/div>\n\n<p>Similarly, <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">BeProperSubsetOf<\/span> can be used when the subject must be contained within another collection while still being strictly smaller as a set.<\/p>\n\n<h3 style=\"margin-top:28px;color:#222;\">Empty subsets now behave naturally<\/h3>\n\n<p>There is an important edge case in the new behavior.<\/p>\n\n<div style=\"background:linear-gradient(135deg,#fff4ec 0%,#fffaf7 100%);border:1px solid #f8d7c7;border-left:6px solid #f26522;padding:18px 20px;margin:18px 0;border-radius:14px;box-shadow:0 8px 24px rgba(242,101,34,0.10);\">\n  <h3 style=\"margin:0 0 10px 0;color:#f26522;font-weight:800;\">Empty subset behavior<\/h3>\n  <p style=\"margin:0;line-height:1.6;color:#1f2937;\">An empty expected subset is considered valid for <strong>BeSupersetOf<\/strong> y <strong>BeProperSupersetOf<\/strong> rather than causing an exception.<\/p>\n<\/div>\n\n<p>That makes the assertions behave more naturally from a set-theory perspective and removes the need for special handling around empty expected collections.<\/p>\n\n<h2 style=\"margin-top:42px;color:#f26522;\">Test System.Text.Json round-tripping with BeJsonSerializable()<\/h2>\n\n<p>One of the most useful additions in 8.11 for modern .NET applications is <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">BeJsonSerializable&lt;T&gt;()<\/span>.<\/p>\n\n<div style=\"background:linear-gradient(135deg,#fff4ec 0%,#fffaf7 100%);border:1px solid #f8d7c7;border-left:6px solid #f26522;padding:18px 20px;margin:18px 0;border-radius:14px;box-shadow:0 8px 24px rgba(242,101,34,0.10);\">\n  <h3 style=\"margin:0 0 10px 0;color:#f26522;font-weight:800;\">JSON round-trip assertion<\/h3>\n  <div style=\"margin:0;line-height:1.7;color:#1f2937;background:transparent;border:0;padding:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:0.98em;\">\n    myObject.Should().BeJsonSerializable&lt;MyType&gt;();\n  <\/div>\n<\/div>\n\n<p>Available on .NET 6 and later, the assertion verifies <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">System.Text.Json<\/span> serialization round-tripping.<\/p>\n\n<p>In other words, you can verify that an object can be serialized to JSON, deserialized again, and still produce an equivalent object without manually building the entire serialization round-trip inside the test.<\/p>\n\n<p>This is particularly useful for DTOs, API contracts, configuration objects, persisted application state, and other models that regularly cross serialization boundaries.<\/p>\n\n<h3 style=\"margin-top:28px;color:#222;\">Customize serialization and equivalency<\/h3>\n\n<p>The new assertion also provides overloads for equivalency configuration and <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">JsonSerializerOptions<\/span>.<\/p>\n\n<p>That matters because real applications rarely rely exclusively on the default serializer configuration.<\/p>\n\n<div style=\"background:#fff8f4;border:1px solid #f8d7c7;padding:20px 24px;border-radius:14px;margin:24px 0;box-shadow:0 6px 18px rgba(242,101,34,0.08);\">\n  <ul style=\"padding-left:22px;margin:0;\">\n    <li style=\"margin-bottom:12px;\"><strong>Naming policies:<\/strong> Match the JSON property naming conventions used by the application.<\/li>\n    <li style=\"margin-bottom:12px;\"><strong>Custom converters:<\/strong> Test application-specific serialization behavior.<\/li>\n    <li style=\"margin-bottom:12px;\"><strong>Enum serialization:<\/strong> Verify enums using the configured representation.<\/li>\n    <li style=\"margin-bottom:12px;\"><strong>Reference handling:<\/strong> Apply the same reference behavior used at runtime.<\/li>\n    <li style=\"margin-bottom:12px;\"><strong>Case sensitivity:<\/strong> Reflect the application's serializer settings.<\/li>\n    <li><strong>Ignore conditions:<\/strong> Test using the same property exclusion rules as production code.<\/li>\n  <\/ul>\n<\/div>\n\n<p>Being able to supply <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">JsonSerializerOptions<\/span> allows the assertion to more closely reflect the serialization behavior used by the application itself.<\/p>\n\n<p>The result is a test that describes its purpose clearly without hiding that purpose behind serialization boilerplate.<\/p>\n\n<h2 style=\"margin-top:42px;color:#f26522;\">New assertions for multiline strings<\/h2>\n\n<p>Testing multiline output has also become easier.<\/p>\n\n<p><span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">StringAssertions<\/span> now includes several dedicated line-oriented assertions.<\/p>\n\n<div style=\"background:#fff8f4;border:1px solid #f8d7c7;padding:20px 24px;border-radius:14px;margin:24px 0;box-shadow:0 6px 18px rgba(242,101,34,0.08);\">\n  <ul style=\"padding-left:22px;margin:0;\">\n    <li style=\"margin-bottom:12px;\"><strong>HaveLineCount()<\/strong><\/li>\n    <li style=\"margin-bottom:12px;\"><strong>NotHaveLineCount()<\/strong><\/li>\n    <li style=\"margin-bottom:12px;\"><strong>ContainLine()<\/strong><\/li>\n    <li><strong>NotContainLine()<\/strong><\/li>\n  <\/ul>\n<\/div>\n\n<p>These are useful for testing generated reports, logs, command-line output, templates, formatted messages, exported text, and other multiline content.<\/p>\n\n<div style=\"background:linear-gradient(135deg,#fff4ec 0%,#fffaf7 100%);border:1px solid #f8d7c7;border-left:6px solid #f26522;padding:18px 20px;margin:18px 0;border-radius:14px;box-shadow:0 8px 24px rgba(242,101,34,0.10);\">\n  <h3 style=\"margin:0 0 10px 0;color:#f26522;font-weight:800;\">Testing multiline output<\/h3>\n  <div style=\"margin:0;line-height:1.7;color:#1f2937;background:transparent;border:0;padding:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:0.98em;\">\n    var output = \"\"\"<br\/>\n    Build started<br\/>\n    Compilation successful<br\/>\n    Build completed<br\/>\n    \"\"\";<br\/><br\/>\n    output.Should().HaveLineCount(3);<br\/>\n    output.Should().ContainLine(\"Compilation successful\");\n  <\/div>\n<\/div>\n\n<p>Previously, developers might split the string manually before asserting against the resulting collection. Now the intent can remain at the string assertion level.<\/p>\n\n<h3 style=\"margin-top:28px;color:#222;\">Cross-platform line ending normalization<\/h3>\n\n<p>The assertions normalize <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">\\r\\n<\/span>, <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">\\n<\/span>y <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">\\r<\/span>.<\/p>\n\n<div style=\"background:linear-gradient(135deg,#fff4ec 0%,#fffaf7 100%);border:1px solid #f8d7c7;border-left:6px solid #f26522;padding:18px 20px;margin:18px 0;border-radius:14px;box-shadow:0 8px 24px rgba(242,101,34,0.10);\">\n  <h3 style=\"margin:0 0 10px 0;color:#f26522;font-weight:800;\">Why line-ending normalization matters<\/h3>\n  <p style=\"margin:0;line-height:1.6;color:#1f2937;\">Tests dealing with generated text can otherwise become dependent on the line-ending convention of the operating system or source data. Normalizing those endings makes line-oriented assertions less fragile across Windows and other environments.<\/p>\n<\/div>\n\n<p><span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">ContainLine<\/span> also returns an <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">AndWhichConstraint<\/span>, exposing the matching line so additional assertions can be chained against it.<\/p>\n\n<h2 style=\"margin-top:42px;color:#f26522;\">ValueTask now receives first-class assertion support<\/h2>\n\n<p>Fluent Assertions 8.11 adds <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">Should()<\/span> overloads for <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">Func&lt;ValueTask&gt;<\/span> y <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">Func&lt;ValueTask&lt;T&gt;&gt;<\/span>.<\/p>\n\n<div style=\"background:linear-gradient(135deg,#fff4ec 0%,#fffaf7 100%);border:1px solid #f8d7c7;border-left:6px solid #f26522;padding:18px 20px;margin:18px 0;border-radius:14px;box-shadow:0 8px 24px rgba(242,101,34,0.10);\">\n  <h3 style=\"margin:0 0 10px 0;color:#f26522;font-weight:800;\">Supported ValueTask delegates<\/h3>\n  <div style=\"margin:0;line-height:1.8;color:#1f2937;background:transparent;border:0;padding:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:0.98em;\">\n    Func&lt;ValueTask&gt;<br\/>\n    Func&lt;ValueTask&lt;T&gt;&gt;\n  <\/div>\n<\/div>\n\n<p>That brings <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">ValueTask<\/span>-returning delegates in line with the assertion experience already available for <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">Tarea<\/span>-returning delegates.<\/p>\n\n<p>This is useful for libraries and performance-sensitive .NET code where <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">ValueTask<\/span> is exposed intentionally to reduce allocations in scenarios where operations may complete synchronously.<\/p>\n\n<p>A <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">ValueTask<\/span> API no longer needs to feel like a second-class citizen in the test suite. There is, however, an important migration consideration.<\/p>\n\n<h2 style=\"margin-top:42px;color:#f26522;\">Breaking change: existing ValueTask assertions may need updating<\/h2>\n\n<p>Before 8.11, <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">Func&lt;ValueTask&gt;<\/span> y <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">Func&lt;ValueTask&lt;T&gt;&gt;<\/span> could bind to the synchronous <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">Should&lt;T&gt;(Func&lt;T&gt;)<\/span> overload.<\/p>\n\n<p>That meant Fluent Assertions treated the returned <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">ValueTask<\/span> as an ordinary return value.<\/p>\n\n<p>With the new dedicated overloads, these delegates now bind to asynchronous assertions instead.<\/p>\n\n<div style=\"background:linear-gradient(135deg,#fff4ec 0%,#fffaf7 100%);border:1px solid #f8d7c7;border-left:6px solid #f26522;padding:18px 20px;margin:18px 0;border-radius:14px;box-shadow:0 8px 24px rgba(242,101,34,0.10);\">\n  <h3 style=\"margin:0 0 10px 0;color:#f26522;font-weight:800;\">ValueTask migration changes<\/h3>\n  <div style=\"margin:0;line-height:1.9;color:#1f2937;background:transparent;border:0;padding:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:0.98em;\">\n    Throw() \u2192 ThrowAsync()<br\/>\n    ThrowExactly() \u2192 ThrowExactlyAsync()<br\/>\n    NotThrow() \u2192 NotThrowAsync()<br\/>\n    NotThrowAfter() \u2192 NotThrowAfterAsync()\n  <\/div>\n<\/div>\n\n<p>There is another behavioral difference worth checking during an upgrade: <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">Subject<\/span> now exposes a task-based adapter rather than the original delegate.<\/p>\n\n<p>For teams with APIs that make extensive use of <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">ValueTask<\/span>, this should be one of the first areas reviewed when moving to 8.11.<\/p>\n\n<h2 style=\"margin-top:42px;color:#f26522;\">Easier custom assertions for value types<\/h2>\n\n<p>Fluent Assertions 8.11 also introduces two public base classes designed to reduce the work required when creating custom assertions for value types.<\/p>\n\n<div style=\"background:linear-gradient(135deg,#fff4ec 0%,#fffaf7 100%);border:1px solid #f8d7c7;border-left:6px solid #f26522;padding:18px 20px;margin:18px 0;border-radius:14px;box-shadow:0 8px 24px rgba(242,101,34,0.10);\">\n  <h3 style=\"margin:0 0 10px 0;color:#f26522;font-weight:800;\">New value-type assertion base classes<\/h3>\n  <div style=\"margin:0;line-height:1.8;color:#1f2937;background:transparent;border:0;padding:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:0.98em;\">\n    ValueTypeAssertions&lt;TSubject, TAssertions&gt;<br\/>\n    NullableValueTypeAssertions&lt;TSubject, TAssertions&gt;\n  <\/div>\n<\/div>\n\n<p>Both derive from <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">ValueTypeAssertionsBase&lt;TSubject, TSubjectResult, TAssertions&gt;<\/span>.<\/p>\n\n<p>For non-nullable subjects, the new base class provides assertions such as <strong>Be()<\/strong>, <strong>NotBe()<\/strong>y <strong>Match()<\/strong>.<\/p>\n\n<p>Nullable value-type assertions additionally receive <strong>BeNull()<\/strong>, <strong>NotBeNull()<\/strong>, <strong>HaveValue()<\/strong>, <strong>NotHaveValue()<\/strong>y <strong>Match()<\/strong>, with support for nullable matching.<\/p>\n\n<p>This is particularly valuable for teams building domain-specific assertion libraries around custom structs and other value types. Instead of recreating common assertion behavior, extension authors can build on a public foundation supplied by Fluent Assertions.<\/p>\n\n<h2 style=\"margin-top:42px;color:#f26522;\">Better reflection filtering with ThatSatisfy<\/h2>\n\n<p><span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">MethodInfoSelector<\/span> y <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">PropertyInfoSelector<\/span> now support <strong>ThatSatisfy<\/strong>.<\/p>\n\n<p>This gives developers another way to filter reflected methods and properties according to a custom condition.<\/p>\n\n<p>It is a relatively specialized addition compared with the new collection or JSON assertions, but it can make reflection-heavy architectural tests and custom assertion scenarios more expressive.<\/p>\n\n<p>For teams using Fluent Assertions to validate API conventions, property structures, or method characteristics, <strong>ThatSatisfy<\/strong> provides additional control over which members are selected.<\/p>\n\n<h2 style=\"margin-top:42px;color:#f26522;\">BeEmpty now provides more useful failure information<\/h2>\n\n<p>The release also improves an existing collection assertion.<\/p>\n\n<p>En <strong>BeEmpty<\/strong> fails for an <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">IEnumerable&lt;T&gt;<\/span>, Fluent Assertions now reports the first 10 items rather than showing only the first item.<\/p>\n\n<div style=\"background:linear-gradient(135deg,#fff4ec 0%,#fffaf7 100%);border:1px solid #f8d7c7;border-left:6px solid #f26522;padding:18px 20px;margin:18px 0;border-radius:14px;box-shadow:0 8px 24px rgba(242,101,34,0.10);\">\n  <h3 style=\"margin:0 0 10px 0;color:#f26522;font-weight:800;\">BeEmpty example<\/h3>\n  <div style=\"margin:0;line-height:1.7;color:#1f2937;background:transparent;border:0;padding:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:0.98em;\">\n    results.Should().BeEmpty();\n  <\/div>\n<\/div>\n\n<p>Si <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">results<\/span> unexpectedly contains several objects, seeing more of the collection gives developers considerably more context about what went wrong.<\/p>\n\n<p>This does not change the assertion itself, but it can shorten the debugging cycle when a test fails.<\/p>\n\n<h2 style=\"margin-top:42px;color:#f26522;\">More reliable JsonNode property assertions<\/h2>\n\n<p>Fluent Assertions 8.11 includes two fixes around <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">JsonNodeAssertions<\/span>.<\/p>\n\n<p>First, <strong>HaveProperty<\/strong> y <strong>NotHaveProperty<\/strong> now correctly distinguish between a property that does not exist and a property that exists with an explicit null value.<\/p>\n\n<p>Those are semantically different JSON states:<\/p>\n\n<div style=\"background:linear-gradient(135deg,#fff4ec 0%,#fffaf7 100%);border:1px solid #f8d7c7;border-left:6px solid #f26522;padding:18px 20px;margin:18px 0;border-radius:14px;box-shadow:0 8px 24px rgba(242,101,34,0.10);\">\n  <h3 style=\"margin:0 0 10px 0;color:#f26522;font-weight:800;\">Missing property<\/h3>\n  <div style=\"margin:0;line-height:1.7;color:#1f2937;background:transparent;border:0;padding:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:0.98em;\">\n    {}\n  <\/div>\n<\/div>\n\n<div style=\"background:linear-gradient(135deg,#fff4ec 0%,#fffaf7 100%);border:1px solid #f8d7c7;border-left:6px solid #f26522;padding:18px 20px;margin:18px 0;border-radius:14px;box-shadow:0 8px 24px rgba(242,101,34,0.10);\">\n  <h3 style=\"margin:0 0 10px 0;color:#f26522;font-weight:800;\">Property with an explicit null value<\/h3>\n  <div style=\"margin:0;line-height:1.7;color:#1f2937;background:transparent;border:0;padding:0;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:0.98em;\">\n    {<br\/>\n    &nbsp;&nbsp;\"name\": null<br\/>\n    }\n  <\/div>\n<\/div>\n\n<p>Tests validating API responses or JSON documents often need to distinguish between the two. The release now handles that distinction correctly.<\/p>\n\n<p>Another fix prevents <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">JsonNodeAssertions.HaveProperty<\/span> from throwing an <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">InvalidOperationException<\/span> when it is called on a subject that is not a <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">JsonObject<\/span> while inside an <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">AssertionScope<\/span>.<\/p>\n\n<p>Instead, the assertion infrastructure can produce the intended failure behavior.<\/p>\n\n<h2 style=\"margin-top:42px;color:#f26522;\">Cleaner failures for reflection assertions<\/h2>\n\n<p>Several reflection-related assertions previously had another issue when used inside an <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">AssertionScope<\/span>.<\/p>\n\n<p>Affected <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">PropertyInfoAssertions<\/span> included:<\/p>\n\n<div style=\"background:#fff8f4;border:1px solid #f8d7c7;padding:20px 24px;border-radius:14px;margin:24px 0;box-shadow:0 6px 18px rgba(242,101,34,0.08);\">\n  <ul style=\"padding-left:22px;margin:0;\">\n    <li style=\"margin-bottom:10px;\"><strong>BeVirtual()<\/strong><\/li>\n    <li style=\"margin-bottom:10px;\"><strong>NotBeVirtual()<\/strong><\/li>\n    <li style=\"margin-bottom:10px;\"><strong>BeWritable()<\/strong><\/li>\n    <li style=\"margin-bottom:10px;\"><strong>NotBeWritable()<\/strong><\/li>\n    <li style=\"margin-bottom:10px;\"><strong>BeReadable()<\/strong><\/li>\n    <li style=\"margin-bottom:10px;\"><strong>NotBeReadable()<\/strong><\/li>\n    <li style=\"margin-bottom:10px;\"><strong>Return()<\/strong><\/li>\n    <li><strong>NotReturn()<\/strong><\/li>\n  <\/ul>\n<\/div>\n\n<p><span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">TypeAssertions.HaveProperty<\/span> y <strong>HaveIndexer<\/strong> were affected as well.<\/p>\n\n<p>Under certain failure conditions, these assertions could produce an intermediate <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">NullReferenceException<\/span> before Fluent Assertions had the opportunity to generate the proper assertion failure.<\/p>\n\n<p>Version 8.11 fixes this behavior.<\/p>\n\n<div style=\"background:linear-gradient(135deg,#fff4ec 0%,#fffaf7 100%);border:1px solid #f8d7c7;border-left:6px solid #f26522;padding:18px 20px;margin:18px 0;border-radius:14px;box-shadow:0 8px 24px rgba(242,101,34,0.10);\">\n  <h3 style=\"margin:0 0 10px 0;color:#f26522;font-weight:800;\">Why cleaner failures matter<\/h3>\n  <p style=\"margin:0;line-height:1.6;color:#1f2937;\">An assertion library should explain why an expectation failed. An unrelated <span style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;background:transparent;color:#1f2937;\">NullReferenceException<\/span> can send developers debugging the assertion machinery instead of the code under test.<\/p>\n<\/div>\n\n<h2 style=\"margin-top:42px;color:#f26522;\">Why Fluent Assertions 8.11 matters<\/h2>\n\n<p>Fluent Assertions 8.11 is not centered around one major headline feature. Instead, it improves several everyday testing workflows across modern .NET applications.<\/p>\n\n<div style=\"background:#fff8f4;border:1px solid #f8d7c7;padding:20px 24px;border-radius:14px;margin:24px 0;box-shadow:0 6px 18px rgba(242,101,34,0.08);\">\n  <ul style=\"padding-left:22px;margin:0;\">\n    <li style=\"margin-bottom:12px;\"><strong>Collection testing:<\/strong> Set-oriented assertions with BeSupersetOf, BeProperSubsetOf, and BeProperSupersetOf.<\/li>\n    <li style=\"margin-bottom:12px;\"><strong>JSON testing:<\/strong> System.Text.Json round-trip testing with BeJsonSerializable&lt;T&gt;().<\/li>\n    <li style=\"margin-bottom:12px;\"><strong>Multiline strings:<\/strong> Dedicated assertions for line counts and matching lines.<\/li>\n    <li style=\"margin-bottom:12px;\"><strong>Asynchronous APIs:<\/strong> Native ValueTask delegate support.<\/li>\n    <li style=\"margin-bottom:12px;\"><strong>Custom assertions:<\/strong> Public base classes for value-type assertions.<\/li>\n    <li style=\"margin-bottom:12px;\"><strong>Better diagnostics:<\/strong> More useful BeEmpty failure output.<\/li>\n    <li><strong>Cleaner failures:<\/strong> More predictable JSON and reflection assertion behavior.<\/li>\n  <\/ul>\n<\/div>\n\n<p>For many developers, <strong>BeJsonSerializable&lt;T&gt;()<\/strong> and the new line assertions will eliminate small pieces of repetitive test code immediately. Library authors may get more value from the new value-type assertion base classes and ValueTask support.<\/p>\n\n<p>The overall direction is consistent with what makes fluent testing APIs useful: tests should communicate the behavior being verified without forcing developers to write unnecessary setup code around the assertion itself.<\/p>\n\n<h2 style=\"margin-top:42px;color:#f26522;\">What to check before upgrading<\/h2>\n\n<p>The main migration concern is ValueTask.<\/p>\n\n<div style=\"background:#fff8f4;border:1px solid #f8d7c7;padding:20px 24px;border-radius:14px;margin:24px 0;box-shadow:0 6px 18px rgba(242,101,34,0.08);\">\n  <ul style=\"padding-left:22px;margin:0;\">\n    <li style=\"margin-bottom:12px;\"><strong>Find ValueTask tests:<\/strong> Search for assertions against Func&lt;ValueTask&gt; and Func&lt;ValueTask&lt;T&gt;&gt;.<\/li>\n    <li style=\"margin-bottom:12px;\"><strong>Review synchronous exception assertions:<\/strong> Look for Throw, ThrowExactly, NotThrow, and NotThrowAfter.<\/li>\n    <li style=\"margin-bottom:12px;\"><strong>Move to async equivalents:<\/strong> Update affected tests to ThrowAsync, ThrowExactlyAsync, NotThrowAsync, and NotThrowAfterAsync.<\/li>\n    <li><strong>Check Subject usage:<\/strong> Subject now exposes a task-based adapter rather than the original delegate.<\/li>\n  <\/ul>\n<\/div>\n\n<p>For projects that do not currently assert against ValueTask delegates, the release primarily provides additive APIs and fixes that can be adopted incrementally.<\/p>\n\n<h2 style=\"margin-top:42px;color:#f26522;\">Final thoughts<\/h2>\n\n<p>Fluent Assertions 8.11 gives .NET developers more precise ways to describe what their tests expect while reducing custom assertion plumbing.<\/p>\n\n<p>The new JSON round-trip assertion is especially relevant for modern .NET applications built around System.Text.Json, while the collection and multiline string APIs make common expectations easier to express directly. First-class ValueTask support also brings the assertion model closer to the asynchronous APIs developers are building today.<\/p>\n\n<p>For teams upgrading, review existing ValueTask assertions for the breaking overload change. Beyond that, the new APIs are worth exploring wherever your test suite currently contains manual collection comparisons, string splitting, JSON round-tripping, or custom value-type assertion infrastructure.<\/p>\n\n<div style=\"text-align:center;padding:36px 24px;margin:36px 0;\">\n  <div style=\"background:linear-gradient(135deg,#fff4ec 0%,#fffaf7 100%);border:1px solid #f8d7c7;border-radius:14px;padding:34px 22px;margin:42px 0;text-align:center;box-shadow:0 8px 24px rgba(242,101,34,0.12);\">\n    <h2 style=\"margin:0 0 14px 0;color:#f26522;\">Building production .NET applications?<\/h2>\n    <p style=\"font-size:1.15em;line-height:1.6;color:#5b657a;max-width:760px;margin:0 auto 22px auto;\">Explore Xceed\u2019s .NET components and tools designed for performance, maintainability, and long-term development.<\/p>\n    <div style=\"display:flex;justify-content:center;gap:16px;flex-wrap:wrap;margin-top:18px;\">\n      <a href=\"https:\/\/trial.xceed.com\" style=\"display:inline-block;background:#f26522;color:#ffffff;text-decoration:none;padding:14px 28px;border:1px solid #f26522;border-radius:12px;font-weight:700;font-size:1em;box-shadow:0 6px 18px rgba(242,101,34,0.18);\">Start an Xceed Trial<\/a>\n      <a href=\"https:\/\/www.nuget.org\/profiles\/xceed\" style=\"display:inline-block;background:#fff4ec;color:#f26522;text-decoration:none;padding:14px 28px;border:1px solid #f8d7c7;border-radius:12px;font-weight:700;font-size:1em;box-shadow:0 6px 18px rgba(242,101,34,0.10);\">Explore Xceed on NuGet<\/a>\n    <\/div>\n  <\/div>\n<\/div>\n\n<h2 style=\"margin-top:42px;color:#f26522;\">Fluent Assertions 8.11 FAQ<\/h2>\n\n<div style=\"background:#fff8f4;border:1px solid #f8d7c7;padding:20px 22px;border-radius:14px;margin:24px 0;box-shadow:0 6px 18px rgba(242,101,34,0.08);\">\n  <h3 style=\"margin-top:0;color:#222;\">What is new in Fluent Assertions 8.11?<\/h3>\n  <p style=\"margin-bottom:0;line-height:1.7;\">Fluent Assertions 8.11 adds new subset and superset collection assertions, BeJsonSerializable&lt;T&gt;(), multiline string assertions, first-class ValueTask support, public base classes for custom value-type assertions, reflection filtering improvements, and several assertion failure fixes.<\/p>\n<\/div>\n\n<div style=\"background:#fff8f4;border:1px solid #f8d7c7;padding:20px 22px;border-radius:14px;margin:24px 0;box-shadow:0 6px 18px rgba(242,101,34,0.08);\">\n  <h3 style=\"margin-top:0;color:#222;\">What does BeJsonSerializable&lt;T&gt;() do?<\/h3>\n  <p style=\"margin-bottom:0;line-height:1.7;\">BeJsonSerializable&lt;T&gt;() verifies a System.Text.Json serialization round-trip. It checks that an object can be serialized, deserialized, and produce an equivalent object. The assertion is available on .NET 6 and later and supports serializer and equivalency configuration.<\/p>\n<\/div>\n\n<div style=\"background:#fff8f4;border:1px solid #f8d7c7;padding:20px 22px;border-radius:14px;margin:24px 0;box-shadow:0 6px 18px rgba(242,101,34,0.08);\">\n  <h3 style=\"margin-top:0;color:#222;\">Does Fluent Assertions 8.11 contain a breaking change?<\/h3>\n  <p style=\"margin-bottom:0;line-height:1.7;\">Yes. Tests using Func&lt;ValueTask&gt; or Func&lt;ValueTask&lt;T&gt;&gt; may be affected because these delegates now bind to dedicated asynchronous assertion overloads. Synchronous exception assertions such as Throw() and NotThrow() may need to be replaced with their asynchronous equivalents.<\/p>\n<\/div>\n\n<div style=\"background:#fff8f4;border:1px solid #f8d7c7;padding:20px 22px;border-radius:14px;margin:24px 0;box-shadow:0 6px 18px rgba(242,101,34,0.08);\">\n  <h3 style=\"margin-top:0;color:#222;\">Which multiline string assertions were added?<\/h3>\n  <p style=\"margin-bottom:0;line-height:1.7;\">Fluent Assertions 8.11 adds HaveLineCount(), NotHaveLineCount(), ContainLine(), and NotContainLine(). The assertions normalize common Windows and Unix-style line endings to make cross-platform tests less fragile.<\/p>\n<\/div>\n\n<div style=\"background:#fff8f4;border:1px solid #f8d7c7;padding:20px 22px;border-radius:14px;margin:24px 0;box-shadow:0 6px 18px rgba(242,101,34,0.08);\">\n  <h3 style=\"margin-top:0;color:#222;\">Which collection assertions are new in Fluent Assertions 8.11?<\/h3>\n  <p style=\"margin-bottom:0;line-height:1.7;\">The release adds BeSupersetOf, BeProperSubsetOf, and BeProperSupersetOf, allowing set relationships to be expressed directly in collection tests.<\/p>\n<\/div>\n\n<div style=\"background:#fff8f4;border:1px solid #f8d7c7;padding:20px 22px;border-radius:14px;margin:24px 0;box-shadow:0 6px 18px rgba(242,101,34,0.08);\">\n  <h3 style=\"margin-top:0;color:#222;\">What should I check before upgrading to Fluent Assertions 8.11?<\/h3>\n  <p style=\"margin-bottom:0;line-height:1.7;\">Review tests that use ValueTask-returning delegates, particularly those using Throw, ThrowExactly, NotThrow, or NotThrowAfter. Those tests may need to use the corresponding asynchronous assertion methods after upgrading.<\/p>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Fluent Assertions 8.11 brings practical improvements for .NET developers, including new collection assertions, `System.Text.Json` round-trip testing with `BeJsonSerializable<t>()`, multiline string assertions, and first-class `ValueTask` support. The release also improves custom value-type assertions, error messages, and JSON and reflection assertion behavior.<\/p>","protected":false},"author":12,"featured_media":4447,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[141,50],"tags":[],"products":[793],"class_list":["post-4442","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-all","category-releases","products-fluent-assertions"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Fluent Assertions 8.11: What\u2019s New for .NET Developers<\/title>\n<meta name=\"description\" content=\"Explore Fluent Assertions 8.11, including new collection assertions, JSON serialization testing, multiline string assertions, ValueTask support, custom value-type assertions, fixes, and breaking changes.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/xceed.com\/es\/blog\/libera\/blog-fluent-assertions-8-11-whats-new\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fluent Assertions 8.11: What\u2019s New for .NET Developers\" \/>\n<meta property=\"og:description\" content=\"Explore Fluent Assertions 8.11, including new collection assertions, JSON serialization testing, multiline string assertions, ValueTask support, custom value-type assertions, fixes, and breaking changes.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/xceed.com\/es\/blog\/libera\/blog-fluent-assertions-8-11-whats-new\/\" \/>\n<meta property=\"og:site_name\" content=\"Xceed Software\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-08T16:11:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-14T14:14:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/xceed.com\/wp-content\/uploads\/2026\/09\/4.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Christopher Radford\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Christopher Radford\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/releases\\\/blog-fluent-assertions-8-11-whats-new\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/releases\\\/blog-fluent-assertions-8-11-whats-new\\\/\"},\"author\":{\"name\":\"Christopher Radford\",\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#\\\/schema\\\/person\\\/79a6cce48b70a88e6701fef086d7c351\"},\"headline\":\"Fluent Assertions 8.11: Better collection, JSON, string, ValueTask, and custom assertions\",\"datePublished\":\"2026-09-08T16:11:39+00:00\",\"dateModified\":\"2026-09-14T14:14:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/releases\\\/blog-fluent-assertions-8-11-whats-new\\\/\"},\"wordCount\":1972,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/releases\\\/blog-fluent-assertions-8-11-whats-new\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/xceed.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/4.png\",\"articleSection\":[\"All\",\"Releases\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/xceed.com\\\/blog\\\/releases\\\/blog-fluent-assertions-8-11-whats-new\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/releases\\\/blog-fluent-assertions-8-11-whats-new\\\/\",\"url\":\"https:\\\/\\\/xceed.com\\\/blog\\\/releases\\\/blog-fluent-assertions-8-11-whats-new\\\/\",\"name\":\"Fluent Assertions 8.11: What\u2019s New for .NET Developers\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/releases\\\/blog-fluent-assertions-8-11-whats-new\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/releases\\\/blog-fluent-assertions-8-11-whats-new\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/xceed.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/4.png\",\"datePublished\":\"2026-09-08T16:11:39+00:00\",\"dateModified\":\"2026-09-14T14:14:48+00:00\",\"description\":\"Explore Fluent Assertions 8.11, including new collection assertions, JSON serialization testing, multiline string assertions, ValueTask support, custom value-type assertions, fixes, and breaking changes.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/releases\\\/blog-fluent-assertions-8-11-whats-new\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/xceed.com\\\/blog\\\/releases\\\/blog-fluent-assertions-8-11-whats-new\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/releases\\\/blog-fluent-assertions-8-11-whats-new\\\/#primaryimage\",\"url\":\"https:\\\/\\\/xceed.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/4.png\",\"contentUrl\":\"https:\\\/\\\/xceed.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/4.png\",\"width\":1280,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/releases\\\/blog-fluent-assertions-8-11-whats-new\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/xceed.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Fluent Assertions 8.11: Better collection, JSON, string, ValueTask, and custom assertions\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/xceed.com\\\/fr\\\/\",\"name\":\"Xceed Software\",\"description\":\"Provides tools for .NET, Windows Forms, WPF, Silverlight, and ASP.NET developers to create better applications.\",\"publisher\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/xceed.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#organization\",\"name\":\"Xceed Software\",\"alternateName\":\"Xceed Software\",\"url\":\"https:\\\/\\\/xceed.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/xceed.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/Untitled-design-24.png\",\"contentUrl\":\"https:\\\/\\\/xceed.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/Untitled-design-24.png\",\"width\":512,\"height\":512,\"caption\":\"Xceed Software\"},\"image\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#\\\/schema\\\/person\\\/79a6cce48b70a88e6701fef086d7c351\",\"name\":\"Christopher Radford\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/646a50aec7dd7187eab0ace3be81c465cdf54ce89b57357657f254b7cb1b996c?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/646a50aec7dd7187eab0ace3be81c465cdf54ce89b57357657f254b7cb1b996c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/646a50aec7dd7187eab0ace3be81c465cdf54ce89b57357657f254b7cb1b996c?s=96&d=mm&r=g\",\"caption\":\"Christopher Radford\"},\"sameAs\":[\"http:\\\/\\\/www.localhost:10003\"],\"url\":\"https:\\\/\\\/xceed.com\\\/es\\\/blog\\\/author\\\/radfordc\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Fluent Assertions 8.11: What\u2019s New for .NET Developers","description":"Explore Fluent Assertions 8.11, including new collection assertions, JSON serialization testing, multiline string assertions, ValueTask support, custom value-type assertions, fixes, and breaking changes.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/xceed.com\/es\/blog\/libera\/blog-fluent-assertions-8-11-whats-new\/","og_locale":"es_MX","og_type":"article","og_title":"Fluent Assertions 8.11: What\u2019s New for .NET Developers","og_description":"Explore Fluent Assertions 8.11, including new collection assertions, JSON serialization testing, multiline string assertions, ValueTask support, custom value-type assertions, fixes, and breaking changes.","og_url":"https:\/\/xceed.com\/es\/blog\/libera\/blog-fluent-assertions-8-11-whats-new\/","og_site_name":"Xceed Software","article_published_time":"2026-09-08T16:11:39+00:00","article_modified_time":"2026-09-14T14:14:48+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/xceed.com\/wp-content\/uploads\/2026\/09\/4.png","type":"image\/png"}],"author":"Christopher Radford","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Christopher Radford","Est. reading time":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/xceed.com\/blog\/releases\/blog-fluent-assertions-8-11-whats-new\/#article","isPartOf":{"@id":"https:\/\/xceed.com\/blog\/releases\/blog-fluent-assertions-8-11-whats-new\/"},"author":{"name":"Christopher Radford","@id":"https:\/\/xceed.com\/fr\/#\/schema\/person\/79a6cce48b70a88e6701fef086d7c351"},"headline":"Fluent Assertions 8.11: Better collection, JSON, string, ValueTask, and custom assertions","datePublished":"2026-09-08T16:11:39+00:00","dateModified":"2026-09-14T14:14:48+00:00","mainEntityOfPage":{"@id":"https:\/\/xceed.com\/blog\/releases\/blog-fluent-assertions-8-11-whats-new\/"},"wordCount":1972,"commentCount":0,"publisher":{"@id":"https:\/\/xceed.com\/fr\/#organization"},"image":{"@id":"https:\/\/xceed.com\/blog\/releases\/blog-fluent-assertions-8-11-whats-new\/#primaryimage"},"thumbnailUrl":"https:\/\/xceed.com\/wp-content\/uploads\/2026\/09\/4.png","articleSection":["All","Releases"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/xceed.com\/blog\/releases\/blog-fluent-assertions-8-11-whats-new\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/xceed.com\/blog\/releases\/blog-fluent-assertions-8-11-whats-new\/","url":"https:\/\/xceed.com\/blog\/releases\/blog-fluent-assertions-8-11-whats-new\/","name":"Fluent Assertions 8.11: What\u2019s New for .NET Developers","isPartOf":{"@id":"https:\/\/xceed.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/xceed.com\/blog\/releases\/blog-fluent-assertions-8-11-whats-new\/#primaryimage"},"image":{"@id":"https:\/\/xceed.com\/blog\/releases\/blog-fluent-assertions-8-11-whats-new\/#primaryimage"},"thumbnailUrl":"https:\/\/xceed.com\/wp-content\/uploads\/2026\/09\/4.png","datePublished":"2026-09-08T16:11:39+00:00","dateModified":"2026-09-14T14:14:48+00:00","description":"Explore Fluent Assertions 8.11, including new collection assertions, JSON serialization testing, multiline string assertions, ValueTask support, custom value-type assertions, fixes, and breaking changes.","breadcrumb":{"@id":"https:\/\/xceed.com\/blog\/releases\/blog-fluent-assertions-8-11-whats-new\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/xceed.com\/blog\/releases\/blog-fluent-assertions-8-11-whats-new\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/xceed.com\/blog\/releases\/blog-fluent-assertions-8-11-whats-new\/#primaryimage","url":"https:\/\/xceed.com\/wp-content\/uploads\/2026\/09\/4.png","contentUrl":"https:\/\/xceed.com\/wp-content\/uploads\/2026\/09\/4.png","width":1280,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/xceed.com\/blog\/releases\/blog-fluent-assertions-8-11-whats-new\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/xceed.com\/"},{"@type":"ListItem","position":2,"name":"Fluent Assertions 8.11: Better collection, JSON, string, ValueTask, and custom assertions"}]},{"@type":"WebSite","@id":"https:\/\/xceed.com\/fr\/#website","url":"https:\/\/xceed.com\/fr\/","name":"Xceed Software","description":"Proporciona herramientas para que los desarrolladores de .NET, Windows Forms, WPF, Silverlight y ASP.NET puedan crear mejores aplicaciones.","publisher":{"@id":"https:\/\/xceed.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/xceed.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/xceed.com\/fr\/#organization","name":"Xceed Software","alternateName":"Xceed Software","url":"https:\/\/xceed.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/xceed.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/xceed.com\/wp-content\/uploads\/2026\/07\/Untitled-design-24.png","contentUrl":"https:\/\/xceed.com\/wp-content\/uploads\/2026\/07\/Untitled-design-24.png","width":512,"height":512,"caption":"Xceed Software"},"image":{"@id":"https:\/\/xceed.com\/fr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/xceed.com\/fr\/#\/schema\/person\/79a6cce48b70a88e6701fef086d7c351","name":"Christopher Radford","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/646a50aec7dd7187eab0ace3be81c465cdf54ce89b57357657f254b7cb1b996c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/646a50aec7dd7187eab0ace3be81c465cdf54ce89b57357657f254b7cb1b996c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/646a50aec7dd7187eab0ace3be81c465cdf54ce89b57357657f254b7cb1b996c?s=96&d=mm&r=g","caption":"Christopher Radford"},"sameAs":["http:\/\/www.localhost:10003"],"url":"https:\/\/xceed.com\/es\/blog\/author\/radfordc\/"}]}},"_links":{"self":[{"href":"https:\/\/xceed.com\/es\/wp-json\/wp\/v2\/posts\/4442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xceed.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/xceed.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/xceed.com\/es\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/xceed.com\/es\/wp-json\/wp\/v2\/comments?post=4442"}],"version-history":[{"count":5,"href":"https:\/\/xceed.com\/es\/wp-json\/wp\/v2\/posts\/4442\/revisions"}],"predecessor-version":[{"id":4448,"href":"https:\/\/xceed.com\/es\/wp-json\/wp\/v2\/posts\/4442\/revisions\/4448"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/xceed.com\/es\/wp-json\/wp\/v2\/media\/4447"}],"wp:attachment":[{"href":"https:\/\/xceed.com\/es\/wp-json\/wp\/v2\/media?parent=4442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/xceed.com\/es\/wp-json\/wp\/v2\/categories?post=4442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/xceed.com\/es\/wp-json\/wp\/v2\/tags?post=4442"},{"taxonomy":"products","embeddable":true,"href":"https:\/\/xceed.com\/es\/wp-json\/wp\/v2\/products?post=4442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}