| report date | 21 Dec 2023 14:47:33 |
| analysis duration | 00:18.402 |
| ndepend version | 2023.2.3 Professional Developer Edition |
| baseline | Baseline is same code base snapshot. |
| code coverage data | Loaded! Code Coverage metrics, Queries and Rules relative to code Coverage, can be used. |
Diagrams
Application Metrics
Note: Further Application Statistics are available.
|
- 0 source file with at least one new issue introduced since the baseline.
- 244 source files with at least one unresolved issue but no new issue.
- 0 source file with no issue.
- Only 15 source files are listed (on 244). This is a limitation of the Developer license. Reports generated with a Build-Machine or GitHub Action license have an unlimited number of source files listed.
- The setting "Only list source files with issues" is enabled. More source files can be listed by changing this setting from NDepend Project Properties > Report.
| Source File Name | #New Issues | #Un- resolved | #Fixed | New Debt | Debt | %Cov | #Lines | Project | Path | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | |m100|00| 54 | 0 | 0min 0s | |m31|04| 3h 36min | |c100|06| 100% | |m45|02| 526 | FluentAssertions | .\Common | ||
| 0 | |m68|01| 41 | 0 | 0min 0s | |m100|00| 1d 3h | |c84|13| 84.68% | |m100|00| 1062 | FluentAssertions | . | ||
| 0 | |m29|02| 25 | 0 | 0min 0s | |m7|10| 1h 0min | |c75|14| 75% | |m2|12| 107 | FluentAssertions | .\Execution | ||
| 0 | |m19|03| 21 | 0 | 0min 0s | |m9|08| 1h 10min | |c98|07| 98.33% | |m9|07| 171 | FluentAssertions | .\Collections\MaximumMatching | ||
| 0 | |m17|04| 20 | 0 | 0min 0s | |m62|01| 7h 2min | |c94|11| 94.04% | |m76|01| 832 | FluentAssertions | .\Equivalency | ||
| 0 | |m9|06| 17 | 0 | 0min 0s | |m39|03| 4h 30min | |c95|10| 95.38% | |m44|03| 514 | FluentAssertions | .\Numeric | ||
| 0 | |m9|05| 17 | 0 | 0min 0s | |m46|02| 5h 18min | |c100|01| 100% | |m5|10| 137 | FluentAssertions | . | ||
| 0 | |m7|08| 16 | 0 | 0min 0s | |m1|12| 18min | |c100|05| 100% | |m1|13| 89 | FluentAssertions | .\Execution | ||
| 0 | |m7|07| 16 | 0 | 0min 0s | |m6|11| 54min | |c97|08| 97.56% | |m8|08| 163 | FluentAssertions | .\Common | ||
| 0 | |m4|11| 15 | 0 | 0min 0s | |m15|07| 1h 54min | |c86|12| 86.67% | |m14|05| 217 | FluentAssertions | .\Equivalency\Steps | ||
| 0 | |m4|10| 15 | 0 | 0min 0s | |m9|09| 1h 9min | |c100|02| 100% | |m6|09| 139 | FluentAssertions | .\Common | ||
| 0 | |m4|09| 15 | 0 | 0min 0s | |m24|06| 2h 55min | |c96|09| 96.3% | |m12|06| 201 | FluentAssertions | .\Equivalency | ||
| 0 | |m2|12| 14 | 0 | 0min 0s | |m1|13| 16min | |c100|04| 100% | |m0|14| 79 | FluentAssertions | .\Xml\Equivalency | ||
| 0 | |m0|14| 13 | 0 | 0min 0s | |m29|05| 3h 25min | |c100|00| 100% | |m32|04| 397 | FluentAssertions | .\Numeric | ||
| 0 | |m0|13| 13 | 0 | 0min 0s | |m0|14| 9min | |c100|03| 100% | |m4|11| 127 | FluentAssertions | .\Common |
can be stopped upon quality gate
failure. Online documentation.
be run on the baseline. Hence they
have blank trend and baseline value.
| Name | Trend | Baseline Status | Status | Group | |||
|---|---|---|---|---|---|---|---|
| Project Rules \ Quality Gates | ||||||
| Project Rules \ Quality Gates | ||||||
| Project Rules \ Quality Gates | ||||||
| Project Rules \ Quality Gates | ||||||
| Project Rules \ Quality Gates | ||||||
| Project Rules \ Quality Gates | ||||||
| Project Rules \ Quality Gates | ||||||
| Project Rules \ Quality Gates | ||||||
| Project Rules \ Quality Gates | ||||||
| Project Rules \ Quality Gates | ||||||
| Project Rules \ Quality Gates |
- Number of Rules or Queries with Error (syntax error, exception thrown, time-out): 0
development-time, from within the IDE
Online documentation.
run on the baseline. Hence they
have blank # Issues Fixed or Added.
| Name | #New Issues | Un- resolved | Fixed | New Debt | Debt | Elements | Group | |||
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | |m1|12| 4 | 0 | 0min 0s | |m2|11| 1h 42min | methods | Project Rules \ Code Smells | |||
| 0 | |m1|14| 4 | 0 | 0min 0s | |m10|03| 6h 17min | types | Project Rules \ Code Smells | |||
| 0 | |m0|27| 2 | 0 | 0min 0s | |m0|34| 6min | methods | Project Rules \ Code Smells | |||
| 0 | |m0|33| 1 | 0 | 0min 0s | |m2|12| 1h 23min | type | Project Rules \ Code Smells | |||
| 0 | |m0|35| 1 | 0 | 0min 0s | |m0|18| 34min | method | Project Rules \ Code Smells | |||
| 0 | |m25|04| 68 | 0 | 0min 0s | |m0|19| 34min | types | Project Rules \ Object Oriented Design | |||
| 0 | |m0|21| 3 | 0 | 0min 0s | |m4|05| 2h 30min | methods | Project Rules \ Object Oriented Design | |||
| 0 | |m0|30| 1 | 0 | 0min 0s | |m1|13| 51min | type | Project Rules \ Object Oriented Design | |||
| 0 | |m0|40| 1 | 0 | 0min 0s | |m0|35| 6min | type | Project Rules \ Object Oriented Design | |||
| 0 | |m1|19| 4 | 0 | 0min 0s | |m0|23| 20min | namespaces | Project Rules \ Design | |||
| 0 | |m1|18| 4 | 0 | 0min 0s | |m3|06| 2h 11min | types | Project Rules \ Design | |||
| 0 | |m0|20| 3 | 0 | 0min 0s | |m0|26| 14min | types | Project Rules \ Design | |||
| 0 | |m0|26| 2 | 0 | 0min 0s | |m0|38| 4min 0s | types | Project Rules \ Design | |||
| 0 | |m0|42| 1 | 0 | 0min 0s | |m0|24| 16min | type | Project Rules \ Design | |||
| 0 | |m0|41| 1 | 0 | 0min 0s | |m0|37| 5min | method | Project Rules \ Design | |||
| 0 | |m80|01| 210 | 0 | 0min 0s | |m100|00| 7d 3h | members | Project Rules \ Architecture | |||
| 0 | |m0|37| 1 | 0 | 0min 0s | |m0|29| 10min | namespace | Project Rules \ Architecture | |||
| 0 | |m0|36| 1 | 0 | 0min 0s | |m3|08| 2h 0min | namespace | Project Rules \ Architecture | |||
| 0 | |m65|02| 172 | 0 | 0min 0s | |m14|02| 1d 0h | types | Project Rules \ Code Coverage | |||
| 0 | |m45|03| 120 | 0 | 0min 0s | |m20|01| 1d 4h | members | Project Rules \ Code Coverage | |||
| 0 | |m7|06| 21 | 0 | 0min 0s | |m1|14| 49min | types | Project Rules \ Code Coverage | |||
| 0 | |m3|09| 10 | 0 | 0min 0s | |m4|04| 2h 59min | namespaces | Project Rules \ Code Coverage | |||
| 0 | |m0|38| 1 | 0 | 0min 0s | |m0|39| 4min 0s | namespace | Project Rules \ Code Coverage | |||
| 0 | |m1|15| 4 | 0 | 0min 0s | |m1|16| 40min | methods | Project Rules \ Dead Code | |||
| 0 | |m100|00| 261 | 0 | 0min 0s | |m3|07| 2h 10min | methods | Project Rules \ Visibility | |||
| 0 | |m13|05| 35 | 0 | 0min 0s | |m2|10| 1h 45min | types | Project Rules \ Visibility | |||
| 0 | |m5|07| 14 | 0 | 0min 0s | |m0|33| 7min | methods | Project Rules \ Visibility | |||
| 0 | |m0|28| 2 | 0 | 0min 0s | |m0|42| 1min 0s | fields | Project Rules \ Visibility | |||
| 0 | |m0|25| 2 | 0 | 0min 0s | |m0|41| 1min 0s | fields | Project Rules \ Visibility | |||
| 0 | |m1|17| 4 | 0 | 0min 0s | |m0|17| 36min | fields | Project Rules \ Immutability | |||
| 0 | |m1|13| 4 | 0 | 0min 0s | |m1|15| 48min | fields | Project Rules \ Immutability | |||
| 0 | |m0|24| 2 | 0 | 0min 0s | |m0|21| 20min | fields | Project Rules \ Immutability | |||
| 0 | |m0|22| 2 | 0 | 0min 0s | |m0|22| 20min | fields | Project Rules \ Immutability | |||
| 0 | |m0|39| 1 | 0 | 0min 0s | |m0|32| 7min | type | Project Rules \ Immutability | |||
| 0 | |m4|08| 12 | 0 | 0min 0s | |m3|09| 2h 0min | types | Project Rules \ Naming Conventions | |||
| 0 | |m1|10| 6 | 0 | 0min 0s | |m0|20| 30min | types | Project Rules \ Naming Conventions | |||
| 0 | |m1|16| 4 | 0 | 0min 0s | |m0|27| 12min | fields | Project Rules \ Naming Conventions | |||
| 0 | |m0|23| 2 | 0 | 0min 0s | |m0|36| 6min | methods | Project Rules \ Naming Conventions | |||
| 0 | |m0|34| 1 | 0 | 0min 0s | |m0|30| 10min | method | Project Rules \ Naming Conventions | |||
| 0 | |m0|31| 1 | 0 | 0min 0s | |m0|28| 10min | type | Project Rules \ Naming Conventions | |||
| 0 | |m1|11| 5 | 0 | 0min 0s | |m0|25| 15min | types | Project Rules \ Source Files Organization | |||
| 0 | |m0|32| 1 | 0 | 0min 0s | |m0|40| 3min 0s | namespace | Project Rules \ Source Files Organization | |||
| 0 | |m0|29| 2 | 0 | 0min 0s | |m0|31| 10min | properties | Project Rules \ .NET Framework Usage \ System |
Size
% Coverage and % Debt
Issues
Rules
Quality Gates
Debt
Analysis Logs
Logs emitted during NDepend analysis.
Warnings can reveal potential flaws concerning the health of the build process.
A particular warning can be disabled through the NDepend interactive UI, panel Error List, tick the checkbox Disabled corresponding to the warning to disable.
| Message | |
|---|---|
| Begin full analysis with NDepend v2023.2.3 on 21 Dec 2023 14:47:35 | |
| Visual Studio solution file resolved to absolute file path: from {.\FluentAssertions.sln} to {C:\Users\ferrydeboer\source\repos\fluentassertions\FluentAssertions.sln} | |
| Output directory resolved to absolute directory path: C:\Users\ferrydeboer\source\repos\fluentassertions\NDependOut | |
| Coverage file resolved to absolute file path: from {.\coverage\fa_coverage_9a60062a.xml} to {C:\Users\ferrydeboer\source\repos\fluentassertions\coverage\fa_coverage_9a60062a.xml} | |
| .NET Assembly resolved from the Visual Studio solution file {C:\Users\ferrydeboer\source\repos\fluentassertions\FluentAssertions.sln} C:\Users\ferrydeboer\source\repos\fluentassertions\Src\FluentAssertions\bin\Debug\netstandard2.1\FluentAssertions.dll | |
| .NET Assemblies filtered out from the Visual Studio solution file {C:\Users\ferrydeboer\source\repos\fluentassertions\FluentAssertions.sln} AssemblyA AssemblyB XUnit2.Specs MSTestV2.Specs NUnit3.Specs MSpec.Specs Benchmarks Approval.Tests FluentAssertions.Specs UWP.Specs FluentAssertions.Equivalency.Specs VB.Specs FSharp.Specs ExampleExtensions FluentAssertions.Extensibility.Specs | |
| Can't load the assembly {_build}: The file {C:\Users\ferrydeboer\source\repos\fluentassertions\Build\bin\Debug\_build.dll} doesn't exist. Failed attempt to resolve this assembly from the Visual Studio solution file {C:\Users\ferrydeboer\source\repos\fluentassertions\FluentAssertions.sln}. | |
| Concurrent mode | |
| .NET Assemblies loaded from {C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.0} netstandard.dll v2.1.0.0 System.Runtime.dll v8.0.0.0 | |
| 352 source files parsed ; 8 source files not found ; all source files in-sync with PDB | |
| 0 code rule has been extracted from code. | |
| No dependency cycle detected in assemblies referencement graph. | |
| No coverage exclusion file provided (a file with extension .runsettings). | |
| Coverage file correctly parsed: C:\Users\ferrydeboer\source\repos\fluentassertions\coverage\fa_coverage_9a60062a.xml | |
| The assembly {FluentAssertions} is not in sync with corresponding coverage data. The analysis found 4 methods in the assembly that have no associated coverage data. For example, one of this method is {FluentAssertions.Events.FilteredEventRecording.GetEnumerator()} | |
| Do merge code generated by compiler into application code. | |
| Analyze dependencies of your application. | |
| 2 queries or rules have the same name "Quality Gates Evolution". - the query defined in {Project Rules \ Quality Gates} - the query defined in {Project Rules \ Architecture} The query or rule name is used as a case-insensitive unique identifier in various situations, like when processing issues in the report and in the various build-process plugin. A query or rule name is defined in a comment in the query body this way: // <Name>Query or Rule Name Here</Name> | |
| 4 queries or rules have the same name "Critical Rules Violated". - the query defined in {Project Rules \ Quality Gates} - the query defined in {Project Rules \ Hot Spots} - the query defined in {Project Rules \ Architecture} - the query defined in {Project Rules \ Architecture} | |
| No SuppressMessageAttribute found in the analyzed code base. Since NDepend v2018.2 SuppressMessageAttribute can be used to suppress NDepend issues. Don't forget to set in your projects the compilation symbol CODE_ANALYSIS to use this attribute to suppress NDepend issues. | |
| Persisting code model snapshot in {C:\Users\ferrydeboer\source\repos\fluentassertions\NDependOut\NDependAnalysisResult_FluentAssertions_2023Dec21_14h47m33.ndar} | |
| The source directory {C:\Users\ferrydeboer\source\repos\fluentassertions\Src\FluentAssertions\PolySharp.SourceGenerators\PolySharp.SourceGenerators.PolyfillsGenerator} referenced by the PDB file of the assembly {FluentAssertions} can't be found. | |
| Log trend metrics values. | |
| Execute queries and rules | |
| Output report source files | |
| The baseline versions of source files modified are not available in the report. Reason: Cannot find the file {SourceFiles.zip} in the analysis result directory {C:\Users\ferrydeboer\source\repos\fluentassertions\NDependOut}. Make sure that the NDepend Project Properties > Analysis > Zip Source Files setting is enabled. | |
| The report lists 15 sources files (0 new and 0 changed since the baseline) on a total of 244 source files for the application analyzed. See 'Project Properties > Report' to adjust the set of source files listed in the report. | |
| 1 quality gate warns: - 'Critical Issues' value 3 issues greater than warn threshold 0 issues | |
| 2 quality gates fail: - 'Critical Rules Violated' value 5 rules greater than fail threshold 0 rules - 'Debt Rating per Namespace' value 2 namespaces greater than fail threshold 0 namespaces | |
| Building the report (standard). | |
| NDepend analysis done. Duration: 00:18.402 |
Application Statistics
| Stat | # Occurences | Avg | StdDev | Max |
|---|---|---|---|---|
| Properties on interfaces | 27 interfaces | 2.33 | 3.65 | 16 properties on FluentAssertions.Equivalency.IEquivalencyOptions |
| Methods on interfaces | 27 interfaces | 4.26 | 4.1 | 17 methods on FluentAssertions.Equivalency.IEquivalencyOptions |
| Arguments on methods on interfaces | 115 methods | 0.53 | 0.87 | 4 arguments on FluentAssertions.Formatting.IValueFormatter.Format(Object,FormattedObjectGraph,FormattingContext,FormatChild) |
| Public properties on classes | 386 Classes | 0.65 | 1.54 | 16 public properties on FluentAssertions.Equivalency.Execution.CollectionMemberOptionsDecorator |
| Public methods on classes | 386 classes | 5.36 | 9.63 | 95 public methods on FluentAssertions.Collections.GenericCollectionAssertions<TCollection,T,TAssertions> |
| Arguments on public methods on classes | 2,069 methods | 1.53 | 1.35 | 7 arguments on FluentAssertions.Extensions.FluentDateTimeExtensions.At(DateTime,Int32,Int32,Int32,Int32,Int32,Int32) |
| IL instructions in non-abstract methods | 2,658 methods | 29.18 | 37.34 | 369 IL instructions in FluentAssertions.Specialized.GenericAsyncFunctionAssertions<TResult>.NotThrowAfterAsync(TimeSpan,TimeSpan,String,Object[]) |
| Cyclomatic complexity on non abstract Methods | 2,658 Methods | 2.71 | 3.4 | CC = 38 for FluentAssertions.Equivalency.SelfReferenceEquivalencyOptions<TSelf>.FluentAssertions.Equivalency.IEquivalencyOptions.get_SelectionRules() |
Assemblies Metrics
Clicking column header arrows sorts values.
Clicking column header title text redirect to the online Code Metric definition.
| Assemblies | # lines of code | # IL instruction | # Types | # Abstract Types | # lines of comment | % Comment | % Coverage | Afferent Coupling | Efferent Coupling | Relational Cohesion | Instability | Abstractness | Distance |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| FluentAssertions v1.0.0.0 | 7724 | 77568 | 426 | 37 | 13541 | 63.68 | 96.41 | 0 | 231 | 4.59 | 1 | 0.09 | 0.06 |
If you wish to define thresholds on types' Code Metrics, consider writing some Rule.
Clicking column header arrows sorts values.
Clicking column header title text redirect to the online Code Metric definition.
Types Metrics : Code Quality
| Type Name | Type Rank | # Lines Of Code | # IL Instructions | # Lines Of Comment | % Comment | Cyclomatic Complexity | IL Cyclomatic Complexity | % Coverage | Afferent Coupling | Efferent Coupling | Type Namespace |
|---|---|---|---|---|---|---|---|---|---|---|---|
| AssertionScope | 6.81 | 123 | 956 | 83 | 40.29 | 64 | 101 | 98.37 | 80 | 45 | FluentAssertions.Execution |
| Continuation | 5.4 | 5 | 28 | 6 | 54.55 | 3 | 3 | 100 | 84 | 6 | FluentAssertions.Execution |
| INode | 5.01 | - | - | 50 | 100 | 0 | - | - | 47 | 6 | FluentAssertions.Equivalency |
| FormattedObjectGraph | 4.34 | 36 | 259 | 36 | 50 | 23 | 28 | 100 | 37 | 18 | FluentAssertions.Formatting |
| AndConstraint<T> | 4.14 | 3 | 11 | 3 | 50 | 2 | 2 | 100 | 66 | 5 | FluentAssertions |
| ReferenceTypeAssertions<TSubject ,TAssertions> | 3.93 | 55 | 692 | 175 | 76.09 | 30 | 40 | 100 | 47 | 24 | FluentAssertions.Primitives |
| Execute | 3.78 | 2 | 8 | 3 | 60 | 1 | 1 | 100 | 63 | 4 | FluentAssertions.Execution |
| FormattingContext | 3.76 | 2 | 11 | 3 | 60 | 2 | 3 | 100 | 35 | 5 | FluentAssertions.Formatting |
| FormatChild | 3.76 | - | - | 0 | - | 0 | - | - | 35 | 8 | FluentAssertions.Formatting |
| IEquivalencyOptions | 3.26 | - | - | 55 | 100 | 0 | - | - | 34 | 14 | FluentAssertions.Equivalency |
| Comparands | 3.17 | 17 | 116 | 16 | 48.48 | 15 | 17 | 100 | 31 | 12 | FluentAssertions.Equivalency |
| IValueFormatter | 3.16 | - | - | 27 | 100 | 0 | - | - | 34 | 6 | FluentAssertions.Formatting |
| OccurrenceConstraint | 3.12 | 6 | 35 | 0 | 0 | 4 | 4 | 100 | 17 | 10 | FluentAssertions |
| IEquivalencyValidationContext | 3.05 | - | - | 27 | 100 | 0 | - | - | 26 | 8 | FluentAssertions.Equivalency |
| IAssertionScope | 2.9 | - | - | 153 | 100 | 0 | - | - | 23 | 11 | FluentAssertions.Execution |
| NumericAssertions<T,TAssertions> | 2.89 | 64 | 994 | 217 | 77.22 | 53 | 85 | 95.31 | 27 | 31 | FluentAssertions.Numeric |
| IMember | 2.82 | - | - | 19 | 100 | 0 | - | - | 24 | 5 | FluentAssertions.Equivalency |
| Guard | 2.69 | 27 | 189 | 4 | 12.9 | 24 | 28 | 100 | 50 | 24 | FluentAssertions.Common |
| TypeExtensions | 2.42 | 109 | 1269 | 62 | 36.26 | 125 | 176 | 100 | 34 | 42 | FluentAssertions.Common |
| CallerArgumentExpressionAttribute | 2.4 | 3 | 11 | 0 | 0 | 0 | 2 | - | 42 | 9 | System.Runtime.CompilerServices |
| Guard+ValidatedNotNullAttribute | 2.34 | 0 | 4 | 0 | - | 0 | 1 | - | 41 | 3 | FluentAssertions.Common |
| IObjectInfo | 2.29 | - | - | 19 | 100 | 0 | - | - | 17 | 4 | FluentAssertions.Equivalency |
| CSharpAccessModifier | 1.94 | - | - | 0 | - | 0 | - | - | 11 | 2 | FluentAssertions.Common |
| IEquivalencyValidator | 1.89 | - | - | 3 | 100 | 0 | - | - | 22 | 3 | FluentAssertions.Equivalency |
| EquivalencyResult | 1.87 | - | - | 0 | - | 0 | - | - | 21 | 2 | FluentAssertions.Equivalency |
| Reason | 1.81 | 7 | 27 | 7 | 50 | 5 | 5 | 100 | 23 | 5 | FluentAssertions.Execution |
| Services | 1.73 | 37 | 242 | 2 | 5.13 | 25 | 34 | 91.89 | 9 | 26 | FluentAssertions.Common |
| NullableAttribute | 1.71 | 0 | 19 | - | - | - | 2 | - | 14 | 6 | System.Runtime.CompilerServices |
| IEquivalencyStep | 1.69 | - | - | 10 | 100 | 0 | - | - | 25 | 4 | FluentAssertions.Equivalency |
| OrderStrictness | 1.68 | - | - | 0 | - | 0 | - | - | 7 | 2 | FluentAssertions.Equivalency |
| GenericCollectionAssertions <TCollection,T,TAssertions> | 1.52 | 740 | 8274 | 1347 | 64.54 | 223 | 687 | 97.57 | 12 | 92 | FluentAssertions.Collections |
| StringExtensions | 1.47 | 41 | 332 | 41 | 50 | 26 | 40 | 97.56 | 20 | 20 | FluentAssertions.Common |
| ParsingState | 1.44 | - | - | 0 | - | 0 | - | - | 9 | 2 | FluentAssertions .CallerIdentification |
| GetSubjectId | 1.35 | - | - | 0 | - | 0 | - | - | 9 | 7 | FluentAssertions.Equivalency |
| MemberVisibility | 1.33 | - | - | 0 | - | 0 | - | - | 14 | 3 | FluentAssertions.Equivalency |
| AssertionExtensions | 1.32 | 124 | 946 | 375 | 75.15 | 99 | 136 | 84.68 | 20 | 146 | FluentAssertions |
| NullableNumericAssertions<T ,TAssertions> | 1.3 | 10 | 113 | 54 | 84.38 | 6 | 6 | 100 | 12 | 19 | FluentAssertions.Numeric |
| NumericAssertions<T> | 1.29 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 13 | 6 | FluentAssertions.Numeric |
| IMemberSelectionRule | 1.21 | - | - | 16 | 100 | 0 | - | - | 14 | 5 | FluentAssertions.Equivalency |
| MemberSelectionContext | 1.2 | 8 | 39 | 9 | 52.94 | 5 | 6 | 100 | 11 | 7 | FluentAssertions.Equivalency |
| ITestFramework | 1.2 | - | - | 6 | 100 | 0 | - | - | 7 | 4 | FluentAssertions.Execution |
| ITimer | 1.18 | - | - | 3 | 100 | 0 | - | - | 11 | 2 | FluentAssertions.Common |
| NullableContextAttribute | 1.17 | 0 | 7 | - | - | - | 1 | - | 8 | 6 | System.Runtime.CompilerServices |
| NullableNumericAssertions<T> | 1.11 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 13 | 8 | FluentAssertions.Numeric |
| IParsingStrategy | 1.07 | - | - | 13 | 100 | 0 | - | - | 8 | 5 | FluentAssertions .CallerIdentification |
| ContinuedAssertionScope | 1.07 | 39 | 263 | 14 | 26.42 | 26 | 39 | 92.31 | 1 | 17 | FluentAssertions.Execution |
| GivenSelector<T> | 1.04 | 23 | 165 | 31 | 57.41 | 11 | 17 | 100 | 7 | 18 | FluentAssertions.Execution |
| EmbeddedAttribute | 1.04 | 0 | 4 | - | - | - | 1 | - | 3 | 3 | Microsoft.CodeAnalysis |
| IOrderingRule | 0.95 | - | - | 3 | 100 | 0 | - | - | 9 | 2 | FluentAssertions.Equivalency |
| ITraceWriter | 0.93 | - | - | 10 | 100 | 0 | - | - | 12 | 3 | FluentAssertions.Equivalency .Tracing |
| SelfReferenceEquivalencyOptions <TSelf> | 0.93 | 211 | 1336 | 234 | 52.58 | 92 | 145 | 100 | 10 | 68 | FluentAssertions.Equivalency |
| AndWhichConstraint <TParentConstraint,TMatchedElement > | 0.92 | 15 | 106 | 9 | 37.5 | 6 | 12 | 93.33 | 15 | 16 | FluentAssertions |
| Predicate<TValue> | 0.92 | 8 | 36 | 9 | 52.94 | 5 | 5 | 75 | 7 | 11 | FluentAssertions.Collections .MaximumMatching |
| Element<TValue> | 0.92 | 5 | 17 | 6 | 54.55 | 3 | 3 | 100 | 7 | 5 | FluentAssertions.Collections .MaximumMatching |
| IMemberMatchingRule | 0.85 | - | - | 21 | 100 | 0 | - | - | 9 | 4 | FluentAssertions.Equivalency |
| LateBoundTestFramework | 0.84 | 8 | 94 | 0 | 0 | 3 | 6 | 75 | 4 | 16 | FluentAssertions.Execution |
| Tracer | 0.83 | 8 | 70 | 13 | 61.9 | 6 | 12 | 87.5 | 7 | 12 | FluentAssertions.Equivalency .Tracing |
| FailReason | 0.82 | 5 | 17 | 13 | 72.22 | 3 | 3 | 100 | 6 | 6 | FluentAssertions.Execution |
| FormattingOptions | 0.78 | 8 | 52 | 29 | 78.38 | 8 | 8 | 100 | 7 | 6 | FluentAssertions.Formatting |
| CyclicReferenceHandling | 0.72 | - | - | 6 | 100 | 0 | - | - | 6 | 2 | FluentAssertions.Equivalency |
| IClock | 0.71 | - | - | 14 | 100 | 0 | - | - | 11 | 5 | FluentAssertions.Common |
| ObjectAssertions<TSubject ,TAssertions> | 0.7 | 37 | 428 | 177 | 82.71 | 14 | 28 | 100 | 9 | 39 | FluentAssertions.Primitives |
| MemberInfoAssertions<TSubject ,TAssertions> | 0.7 | 18 | 207 | 50 | 73.53 | 9 | 9 | 88.89 | 6 | 31 | FluentAssertions.Types |
| TypeSelector | 0.69 | 104 | 944 | 102 | 49.51 | 44 | 124 | 97.12 | 6 | 25 | FluentAssertions.Types |
| Formatter | 0.68 | 30 | 402 | 37 | 55.22 | 14 | 25 | 93.33 | 7 | 57 | FluentAssertions.Formatting |
| BooleanAssertions<TAssertions> | 0.67 | 15 | 227 | 57 | 79.17 | 9 | 8 | 100 | 5 | 15 | FluentAssertions.Primitives |
| StringAssertions<TAssertions> | 0.65 | 196 | 2010 | 717 | 78.53 | 72 | 97 | 99.49 | 5 | 37 | FluentAssertions.Primitives |
| IntegerExtensions | 0.65 | 2 | 16 | 0 | 0 | 3 | 4 | 100 | 5 | 5 | FluentAssertions.Common |
| OrderingRuleCollection | 0.64 | 12 | 87 | 24 | 66.67 | 8 | 11 | 91.67 | 7 | 15 | FluentAssertions.Equivalency |
| EnumAssertions<TEnum,TAssertions> | 0.64 | 43 | 757 | 188 | 81.39 | 29 | 43 | 100 | 4 | 32 | FluentAssertions.Primitives |
| EqualityStrategy | 0.64 | - | - | 12 | 100 | 0 | - | - | 6 | 2 | FluentAssertions.Equivalency |
| DateTimeOffsetAssertions <TAssertions> | 0.63 | 95 | 1966 | 476 | 83.36 | 54 | 93 | 100 | 5 | 29 | FluentAssertions.Primitives |
| DateTimeAssertions<TAssertions> | 0.63 | 81 | 1684 | 421 | 83.86 | 43 | 77 | 98.77 | 5 | 29 | FluentAssertions.Primitives |
| IStringComparisonStrategy | 0.62 | - | - | 6 | 100 | 0 | - | - | 6 | 3 | FluentAssertions.Primitives |
| Disposable | 0.62 | 3 | 14 | 0 | 0 | 2 | 2 | 100 | 3 | 4 | FluentAssertions |
| IConfigurationStore | 0.61 | - | - | 0 | - | 0 | - | - | 3 | 1 | FluentAssertions.Common |
| MemberPath | 0.61 | 27 | 268 | 24 | 47.06 | 24 | 32 | 100 | 7 | 21 | FluentAssertions.Common |
| IMemberInfo | 0.6 | - | - | 18 | 100 | 0 | - | - | 5 | 4 | FluentAssertions.Equivalency |
| GuidAssertions<TAssertions> | 0.58 | 18 | 230 | 70 | 79.55 | 12 | 22 | 100 | 4 | 16 | FluentAssertions.Primitives |
| SimpleTimeSpanAssertions <TAssertions> | 0.58 | 30 | 489 | 140 | 82.35 | 15 | 39 | 100 | 4 | 17 | FluentAssertions.Primitives |
| StreamAssertions<TSubject ,TAssertions> | 0.57 | 74 | 960 | 144 | 66.06 | 46 | 66 | 93.24 | 3 | 14 | FluentAssertions.Streams |
| ConversionSelector | 0.56 | 31 | 217 | 10 | 24.39 | 14 | 27 | 100 | 5 | 25 | FluentAssertions.Equivalency |
| EquivalencyOptions<TExpectation> | 0.54 | 22 | 147 | 75 | 77.32 | 12 | 12 | 95.45 | 8 | 23 | FluentAssertions.Equivalency |
| EnumEquivalencyHandling | 0.52 | - | - | 0 | - | 0 | - | - | 4 | 2 | FluentAssertions.Equivalency |
| IExtractExceptions | 0.51 | - | - | 0 | - | 0 | - | - | 9 | 2 | FluentAssertions.Specialized |
| AssertionOptions | 0.51 | 9 | 31 | 29 | 76.32 | 5 | 5 | 100 | 8 | 15 | FluentAssertions |
| IEventRecording | 0.51 | - | - | 9 | 100 | 0 | - | - | 6 | 5 | FluentAssertions.Events |
| OccurredEvent | 0.51 | 8 | 32 | 12 | 60 | 8 | 9 | 100 | 6 | 7 | FluentAssertions.Events |
| MethodInfoExtensions | 0.49 | 16 | 125 | 4 | 20 | 10 | 16 | 100 | 5 | 28 | FluentAssertions.Common |
| IAssertionStrategy | 0.49 | - | - | 12 | 100 | 0 | - | - | 3 | 5 | FluentAssertions.Execution |
| CallerIdentifier | 0.48 | 76 | 609 | 2 | 2.56 | 51 | 89 | 90.79 | 5 | 43 | FluentAssertions |
| Node | 0.47 | 41 | 400 | 2 | 4.65 | 35 | 50 | 87.8 | 8 | 19 | FluentAssertions.Equivalency |
| ObjectAssertions | 0.47 | 11 | 150 | 48 | 81.36 | 7 | 10 | 100 | 9 | 17 | FluentAssertions.Primitives |
| GetTraceMessage | 0.47 | - | - | 0 | - | 0 | - | - | 6 | 8 | FluentAssertions.Equivalency .Tracing |
| FormattedObjectGraph+PossibleMulti lineFragment | 0.46 | 29 | 375 | 0 | 0 | 17 | 40 | 79.31 | 2 | 18 | FluentAssertions.Formatting |
| TypeAssertions | 0.45 | 260 | 2760 | 790 | 75.24 | 107 | 121 | 98.85 | 3 | 37 | FluentAssertions.Types |
| StringCollectionAssertions <TCollection,TAssertions> | 0.45 | 47 | 522 | 164 | 77.73 | 15 | 37 | 100 | 2 | 50 | FluentAssertions.Collections |
| MaxLinesExceededException | 0.43 | 3 | 18 | 0 | 0 | 3 | 3 | 33.33 | 2 | 3 | FluentAssertions.Formatting |
| ICloneable2 | 0.42 | - | - | 6 | 100 | 0 | - | - | 2 | 1 | FluentAssertions.Execution |
| SubsequentOrderingGenericCollectio nAssertions<TCollection,T ,TAssertions> | 0.42 | 15 | 117 | 76 | 83.52 | 9 | 11 | 100 | 2 | 20 | FluentAssertions.Collections |
| GenericDictionaryAssertions <TCollection,TKey,TValue ,TAssertions> | 0.41 | 177 | 1875 | 302 | 63.05 | 73 | 112 | 87.57 | 2 | 49 | FluentAssertions.Collections |
| Field | 0.41 | 19 | 123 | 0 | 0 | 11 | 14 | 100 | 4 | 20 | FluentAssertions.Equivalency |
| Property | 0.41 | 19 | 127 | 0 | 0 | 10 | 12 | 100 | 4 | 22 | FluentAssertions.Equivalency |
| TypeExtensions | 0.41 | 9 | 60 | 25 | 73.53 | 7 | 7 | 100 | 1 | 16 | FluentAssertions |
| XmlNodeAssertions<TSubject ,TAssertions> | 0.41 | 12 | 92 | 26 | 68.42 | 4 | 12 | 100 | 2 | 13 | FluentAssertions.Xml |
| ExpressionExtensions | 0.4 | 64 | 396 | 18 | 21.95 | 28 | 46 | 98.44 | 4 | 30 | FluentAssertions.Common |
| EquivalencyStep<T> | 0.39 | 3 | 30 | 3 | 50 | 2 | 4 | 100 | 4 | 11 | FluentAssertions.Equivalency |
| MemberFactory | 0.39 | 11 | 83 | 0 | 0 | 5 | 14 | 81.82 | 4 | 16 | FluentAssertions.Equivalency |
| ObjectReference | 0.38 | 14 | 150 | 15 | 51.72 | 12 | 16 | 100 | 3 | 17 | FluentAssertions.Equivalency .Execution |
| Exactly+ExactlyTimesConstraint | 0.38 | 3 | 13 | 0 | 0 | 3 | 3 | 100 | 1 | 6 | FluentAssertions |
| AtLeast+AtLeastTimesConstraint | 0.38 | 3 | 15 | 0 | 0 | 3 | 3 | 100 | 1 | 6 | FluentAssertions |
| AtMost+AtMostTimesConstraint | 0.38 | 3 | 15 | 0 | 0 | 3 | 3 | 100 | 1 | 6 | FluentAssertions |
| CSharpAccessModifierExtensions | 0.38 | 37 | 181 | 0 | 0 | 22 | 27 | 81.08 | 5 | 7 | FluentAssertions.Common |
| DelegateAssertionsBase<TDelegate ,TAssertions> | 0.38 | 13 | 152 | 0 | 0 | 8 | 10 | 100 | 6 | 25 | FluentAssertions.Specialized |
| ContinuationOfGiven<TSubject> | 0.37 | 5 | 21 | 6 | 54.55 | 3 | 3 | 100 | 4 | 6 | FluentAssertions.Execution |
| ContextDataItems+DataItem | 0.36 | 11 | 54 | 0 | 0 | 7 | 8 | 100 | 2 | 7 | FluentAssertions.Execution |
| IAssertionContext<TSubject> | 0.36 | - | - | 17 | 100 | 0 | - | - | 4 | 4 | FluentAssertions.Equivalency |
| LessThan+LessThanTimesConstraint | 0.36 | 3 | 13 | 0 | 0 | 3 | 3 | 100 | 1 | 6 | FluentAssertions |
| MoreThan+MoreThanTimesConstraint | 0.36 | 3 | 13 | 0 | 0 | 3 | 3 | 100 | 1 | 6 | FluentAssertions |
| EquivalencyValidationContext | 0.36 | 21 | 231 | 0 | 0 | 19 | 21 | 95.24 | 7 | 22 | FluentAssertions.Equivalency |
| TimeSpanCondition | 0.35 | - | - | 0 | - | 0 | - | - | 4 | 2 | FluentAssertions.Primitives |
| MethodBaseAssertions<TSubject ,TAssertions> | 0.34 | 17 | 167 | 26 | 60.47 | 6 | 10 | 100 | 3 | 25 | FluentAssertions.Types |
| EventMetadata | 0.34 | 5 | 17 | 6 | 54.55 | 3 | 3 | 100 | 2 | 6 | FluentAssertions.Events |
| EventAssertions<T> | 0.34 | 26 | 274 | 56 | 68.29 | 12 | 20 | 84.62 | 2 | 24 | FluentAssertions.Events |
| ContextDataItems | 0.34 | 25 | 223 | 0 | 0 | 11 | 29 | 100 | 2 | 19 | FluentAssertions.Execution |
| MaximumMatchingSolver<TValue >+Match | 0.33 | 0 | 0 | 0 | - | 0 | 0 | - | 3 | 3 | FluentAssertions.Collections .MaximumMatching |
| ExcludeMemberByPathSelectionRule | 0.33 | 6 | 60 | 0 | 0 | 4 | 8 | 100 | 2 | 15 | FluentAssertions.Equivalency .Selection |
| IReflector | 0.33 | - | - | 0 | - | 0 | - | - | 3 | 5 | FluentAssertions.Common |
| ComparableTypeAssertions<T ,TAssertions> | 0.33 | 35 | 525 | 204 | 85.36 | 18 | 29 | 100 | 1 | 37 | FluentAssertions.Numeric |
| XmlReaderValidator | 0.32 | 81 | 761 | 9 | 10 | 42 | 68 | 98.77 | 3 | 26 | FluentAssertions.Xml.Equivalency |
| Configuration | 0.32 | 27 | 191 | 22 | 44.9 | 16 | 21 | 100 | 3 | 14 | FluentAssertions.Common |
| AttributeData | 0.32 | 12 | 51 | 0 | 0 | 7 | 8 | 100 | 2 | 6 | FluentAssertions.Xml.Equivalency |
| MaximumMatchingProblem<TValue> | 0.31 | 10 | 59 | 0 | 0 | 4 | 8 | 100 | 3 | 17 | FluentAssertions.Collections .MaximumMatching |
| NullableEnumAssertions<TEnum ,TAssertions> | 0.31 | 7 | 89 | 40 | 85.11 | 5 | 5 | 100 | 1 | 14 | FluentAssertions.Primitives |
| AssertionFailedException | 0.3 | 2 | 13 | 0 | 0 | 2 | 2 | 50 | 1 | 6 | FluentAssertions.Execution |
| CollectionMemberObjectInfo | 0.3 | 13 | 59 | 0 | 0 | 8 | 8 | 84.62 | 1 | 10 | FluentAssertions.Equivalency .Ordering |
| ExceptionAssertions<TException> | 0.3 | 41 | 431 | 100 | 70.92 | 16 | 35 | 95.12 | 4 | 30 | FluentAssertions.Specialized |
| NullableDateTimeAssertions <TAssertions> | 0.3 | 7 | 84 | 40 | 85.11 | 5 | 5 | 100 | 1 | 13 | FluentAssertions.Primitives |
| NullableDateTimeOffsetAssertions <TAssertions> | 0.3 | 7 | 84 | 40 | 85.11 | 5 | 5 | 100 | 1 | 13 | FluentAssertions.Primitives |
| HttpResponseMessageAssertions <TAssertions> | 0.3 | 32 | 424 | 72 | 69.23 | 22 | 26 | 96.88 | 1 | 15 | FluentAssertions.Primitives |
| NullableBooleanAssertions <TAssertions> | 0.3 | 15 | 252 | 82 | 84.54 | 9 | 13 | 100 | 1 | 12 | FluentAssertions.Primitives |
| NullableSimpleTimeSpanAssertions <TAssertions> | 0.3 | 9 | 127 | 51 | 85 | 6 | 9 | 100 | 1 | 13 | FluentAssertions.Primitives |
| BufferedStreamAssertions <TAssertions> | 0.3 | 10 | 129 | 22 | 68.75 | 6 | 6 | 90 | 1 | 13 | FluentAssertions.Streams |
| NullableGuidAssertions<TAssertions > | 0.3 | 9 | 127 | 51 | 85 | 6 | 9 | 100 | 1 | 13 | FluentAssertions.Primitives |
| AssertionScope+DeferredReportable | 0.3 | 3 | 13 | 0 | 0 | 2 | 2 | 100 | 1 | 5 | FluentAssertions.Execution |
| CollectingAssertionStrategy | 0.3 | 16 | 93 | 12 | 42.86 | 8 | 11 | 93.75 | 1 | 20 | FluentAssertions.Execution |
| DefaultAssertionStrategy | 0.3 | 3 | 24 | 12 | 80 | 4 | 5 | 0 | 1 | 9 | FluentAssertions.Execution |
| MessageBuilder | 0.3 | 40 | 329 | 2 | 4.76 | 18 | 32 | 97.5 | 1 | 31 | FluentAssertions.Execution |
| AtMost | 0.3 | 4 | 12 | 0 | 0 | 4 | 4 | 100 | 1 | 5 | FluentAssertions |
| AtLeast | 0.3 | 4 | 12 | 0 | 0 | 4 | 4 | 100 | 1 | 5 | FluentAssertions |
| Exactly | 0.3 | 4 | 12 | 0 | 0 | 4 | 4 | 100 | 1 | 5 | FluentAssertions |
| StartTimer | 0.3 | - | - | 0 | - | 0 | - | - | 3 | 7 | FluentAssertions.Common |
| ExecutionTime | 0.3 | 29 | 328 | 32 | 52.46 | 14 | 41 | 93.1 | 3 | 25 | FluentAssertions.Specialized |
| EquivalencyValidator | 0.3 | 34 | 272 | 1 | 2.86 | 12 | 31 | 97.06 | 5 | 32 | FluentAssertions.Equivalency |
| MaximumMatchingSolution<TValue> | 0.29 | 7 | 59 | 0 | 0 | 5 | 5 | 100 | 3 | 13 | FluentAssertions.Collections .MaximumMatching |
| StopwatchTimer | 0.29 | 4 | 25 | 2 | 33.33 | 4 | 4 | 100 | 2 | 7 | FluentAssertions.Common |
| ObjectExtensions | 0.29 | 17 | 224 | 4 | 19.05 | 29 | 34 | 100 | 4 | 14 | FluentAssertions.Common |
| SelectMemberByPathSelectionRule | 0.29 | 9 | 49 | 0 | 0 | 4 | 5 | 100 | 2 | 16 | FluentAssertions.Equivalency .Selection |
| Clock | 0.29 | 3 | 22 | 0 | 0 | 3 | 4 | 100 | 4 | 9 | FluentAssertions.Common |
| StringAssertions | 0.29 | 1 | 6 | 3 | 75 | 1 | 1 | 100 | 4 | 6 | FluentAssertions.Primitives |
| CyclicReferenceDetector | 0.29 | 8 | 58 | 13 | 61.9 | 6 | 7 | 87.5 | 2 | 12 | FluentAssertions.Equivalency .Execution |
| Iterator<T> | 0.29 | 46 | 261 | 0 | 0 | 27 | 35 | 93.48 | 3 | 13 | FluentAssertions.Common |
| DateTimeExtensions | 0.28 | 2 | 18 | 4 | 66.67 | 2 | 2 | 100 | 2 | 7 | FluentAssertions.Common |
| StringCollectionAssertions <TCollection> | 0.28 | 1 | 6 | 3 | 75 | 1 | 1 | 100 | 1 | 7 | FluentAssertions.Collections |
| XmlNodeAssertions | 0.28 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 6 | FluentAssertions.Xml |
| XmlElementAssertions | 0.28 | 16 | 200 | 70 | 81.4 | 11 | 14 | 93.75 | 1 | 18 | FluentAssertions.Xml |
| PredicateLambdaExpressionValueForm atter+ParameterDetector | 0.28 | 5 | 34 | 1 | 16.67 | 5 | 7 | 100 | 2 | 7 | FluentAssertions.Formatting |
| EquivalencyPlan | 0.28 | 22 | 260 | 50 | 69.44 | 13 | 25 | 95.45 | 2 | 35 | FluentAssertions |
| PropertyInfoExtensions | 0.27 | 6 | 53 | 0 | 0 | 6 | 6 | 100 | 3 | 7 | FluentAssertions.Common |
| MethodInfoAssertions | 0.27 | 43 | 470 | 106 | 71.14 | 23 | 24 | 100 | 4 | 21 | FluentAssertions.Types |
| AddNonEmptySymbolParsingStrategy+M ode | 0.27 | - | - | 6 | 100 | 0 | - | - | 1 | 2 | FluentAssertions .CallerIdentification |
| ObjectInfo | 0.27 | 12 | 45 | 0 | 0 | 7 | 7 | 100 | 3 | 9 | FluentAssertions.Equivalency .Execution |
| ValueFormatterDetectionMode | 0.27 | - | - | 10 | 100 | 0 | - | - | 2 | 2 | FluentAssertions.Common |
| EnumAssertions<TEnum> | 0.27 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 5 | FluentAssertions.Primitives |
| NullableEnumAssertions<TEnum> | 0.27 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 7 | FluentAssertions.Primitives |
| EnumerableExtensions | 0.26 | 15 | 104 | 9 | 37.5 | 10 | 13 | 86.67 | 3 | 14 | FluentAssertions.Common |
| DelegateAssertions<TDelegate ,TAssertions> | 0.26 | 32 | 248 | 44 | 57.89 | 14 | 20 | 100 | 2 | 32 | FluentAssertions.Specialized |
| TimeSpanPredicate | 0.25 | 5 | 30 | 0 | 0 | 4 | 5 | 100 | 2 | 8 | FluentAssertions.Primitives |
| MaximumMatchingSolver<TValue >+MatchCollection | 0.25 | 10 | 63 | 0 | 0 | 7 | 10 | 90 | 2 | 14 | FluentAssertions.Collections .MaximumMatching |
| MemberToMemberInfoAdapter | 0.25 | 13 | 49 | 0 | 0 | 8 | 8 | 76.92 | 2 | 10 | FluentAssertions.Equivalency .Selection |
| IMonitor<T> | 0.24 | - | - | 16 | 100 | 0 | - | - | 3 | 7 | FluentAssertions.Events |
| MethodInfoSelector | 0.24 | 65 | 575 | 84 | 56.38 | 25 | 78 | 98.46 | 2 | 26 | FluentAssertions.Types |
| PropertyInfoSelector | 0.24 | 51 | 499 | 69 | 57.5 | 22 | 68 | 98.04 | 2 | 25 | FluentAssertions.Types |
| AssertionEngineInitializerAttribut e | 0.24 | 4 | 31 | 3 | 42.86 | 4 | 5 | 100 | 1 | 9 | FluentAssertions.Extensibility |
| NullConfigurationStore | 0.24 | 1 | 10 | 0 | 0 | 1 | 2 | 0 | 1 | 4 | FluentAssertions.Common |
| TestFrameworkProvider | 0.24 | 22 | 205 | 1 | 4.35 | 13 | 16 | 95.45 | 1 | 24 | FluentAssertions.Execution |
| FullFrameworkReflector | 0.24 | 12 | 138 | 0 | 0 | 15 | 16 | 58.33 | 1 | 20 | FluentAssertions.Common |
| EquivalencyOptions | 0.24 | 5 | 17 | 0 | 0 | 1 | 1 | 100 | 1 | 4 | FluentAssertions.Equivalency |
| SubsequentOrderingAssertions<T> | 0.24 | 1 | 7 | 0 | 0 | 1 | 1 | 100 | 2 | 8 | FluentAssertions.Collections |
| SortOrder | 0.24 | - | - | 0 | - | 0 | - | - | 2 | 2 | FluentAssertions.Collections |
| XDocumentAssertions | 0.24 | 48 | 443 | 146 | 75.26 | 18 | 35 | 100 | 2 | 29 | FluentAssertions.Xml |
| XElementAssertions | 0.24 | 50 | 535 | 161 | 76.3 | 20 | 37 | 100 | 2 | 30 | FluentAssertions.Xml |
| XAttributeAssertions | 0.24 | 10 | 188 | 40 | 80 | 8 | 26 | 100 | 2 | 13 | FluentAssertions.Xml |
| PropertyInfoAssertions | 0.23 | 57 | 608 | 135 | 70.31 | 29 | 30 | 100 | 3 | 25 | FluentAssertions.Types |
| EventRecorder | 0.23 | 35 | 319 | 17 | 32.69 | 15 | 35 | 97.14 | 2 | 32 | FluentAssertions.Events |
| EnumerableEquivalencyValidator | 0.22 | 90 | 878 | 0 | 0 | 28 | 83 | 86.67 | 2 | 42 | FluentAssertions.Equivalency.Steps |
| AssertionResultSet | 0.22 | 16 | 140 | 15 | 48.39 | 7 | 18 | 100 | 2 | 15 | FluentAssertions.Equivalency.Steps |
| TypeMemberReflector | 0.22 | 62 | 497 | 0 | 0 | 41 | 69 | 96.77 | 1 | 30 | FluentAssertions.Common |
| AutoConversionStep | 0.22 | 27 | 242 | 0 | 0 | 19 | 22 | 74.07 | 2 | 26 | FluentAssertions.Equivalency.Steps |
| FluentTimeSpanExtensions | 0.22 | 25 | 239 | 98 | 79.67 | 25 | 25 | 100 | 1 | 7 | FluentAssertions.Extensions |
| MaximumMatchingSolver<TValue> | 0.22 | 34 | 237 | 14 | 29.17 | 9 | 26 | 100 | 1 | 22 | FluentAssertions.Collections .MaximumMatching |
| MemberPathSegmentEqualityComparer | 0.22 | 8 | 56 | 6 | 42.86 | 9 | 10 | 87.5 | 1 | 8 | FluentAssertions.Common |
| SelfReferenceEquivalencyOptions <TSelf>+Restriction<TMember>+< >c__3<TMemberType> | 0.21 | 0 | 7 | - | - | - | 2 | - | 2 | 5 | FluentAssertions.Equivalency |
| DateTimeOffsetRangeAssertions <TAssertions> | 0.21 | 23 | 369 | 27 | 54 | 8 | 19 | 100 | 2 | 21 | FluentAssertions.Primitives |
| DateTimeRangeAssertions <TAssertions> | 0.21 | 23 | 381 | 27 | 54 | 8 | 19 | 100 | 2 | 21 | FluentAssertions.Primitives |
| ThreadSafeSequenceGenerator | 0.21 | 2 | 15 | 3 | 60 | 2 | 2 | 100 | 2 | 4 | FluentAssertions.Events |
| AsyncFunctionAssertions<TTask ,TAssertions> | 0.21 | 64 | 1530 | 91 | 58.71 | 20 | 128 | 95.31 | 2 | 46 | FluentAssertions.Specialized |
| PathBasedOrderingRule | 0.21 | 18 | 123 | 3 | 14.29 | 14 | 18 | 88.89 | 1 | 16 | FluentAssertions.Equivalency .Ordering |
| MappedPathMatchingRule | 0.21 | 18 | 112 | 7 | 28 | 8 | 12 | 100 | 1 | 16 | FluentAssertions.Equivalency .Matching |
| CollectionMemberOptionsDecorator | 0.21 | 21 | 126 | 0 | 0 | 18 | 22 | 100 | 1 | 24 | FluentAssertions.Equivalency .Execution |
| MappedMemberMatchingRule <TExpectation,TSubject> | 0.21 | 11 | 79 | 0 | 0 | 8 | 9 | 100 | 1 | 15 | FluentAssertions.Equivalency .Matching |
| IncludeMemberByPathSelectionRule | 0.21 | 11 | 84 | 0 | 0 | 7 | 11 | 100 | 1 | 18 | FluentAssertions.Equivalency .Selection |
| NestedExclusionOptionBuilder <TExpectation,TCurrent> | 0.21 | 9 | 44 | 9 | 50 | 3 | 3 | 100 | 1 | 9 | FluentAssertions.Equivalency |
| EnumerableEquivalencyStep | 0.21 | 16 | 153 | 1 | 5.88 | 11 | 17 | 100 | 2 | 23 | FluentAssertions.Equivalency.Steps |
| TaskCompletionSourceAssertions<T> | 0.21 | 15 | 394 | 24 | 61.54 | 5 | 26 | 93.33 | 2 | 26 | FluentAssertions.Specialized |
| GenericAsyncFunctionAssertions <TResult> | 0.21 | 37 | 789 | 52 | 58.43 | 12 | 58 | 89.19 | 2 | 36 | FluentAssertions.Specialized |
| EnumerableExtensions | 0.21 | 17 | 82 | 0 | 0 | 5 | 9 | 100 | 1 | 11 | FluentAssertions.Formatting |
| GivenSelectorExtensions+Collection WithIndex<T> | 0.21 | 14 | 61 | 0 | 0 | 12 | 12 | 35.71 | 1 | 11 | FluentAssertions.Execution |
| FunctionAssertionHelpers | 0.21 | 17 | 112 | 0 | 0 | 6 | 10 | 100 | 1 | 16 | FluentAssertions.Specialized |
| FullFrameworkReflector+<>O | 0.21 | 0 | 0 | - | - | - | 0 | - | 1 | 6 | FluentAssertions.Common |
| TaskCompletionSourceAssertionsBase | 0.21 | 10 | 193 | 5 | 33.33 | 5 | 19 | 100 | 2 | 23 | FluentAssertions.Specialized |
| ConversionSelector+ConversionSelec torRule | 0.21 | 5 | 17 | 0 | 0 | 3 | 3 | 100 | 1 | 8 | FluentAssertions.Equivalency |
| StringBuilderExtensions | 0.2 | 2 | 10 | 0 | 0 | 2 | 2 | 0 | 1 | 6 | System.Text |
| MaximumMatchingSolver<TValue >+BreadthFirstSearchTracker | 0.2 | 16 | 180 | 0 | 0 | 5 | 22 | 100 | 1 | 20 | FluentAssertions.Collections .MaximumMatching |
| MemberInfoAssertions<TSubject ,TAssertions>+<>c__1<TAttribute> | 0.2 | 0 | 7 | - | - | - | 2 | - | 1 | 7 | FluentAssertions.Types |
| MemberInfoAssertions<TSubject ,TAssertions>+<>c__2<TAttribute> | 0.2 | 0 | 7 | - | - | - | 2 | - | 1 | 7 | FluentAssertions.Types |
| NUnitTestFramework | 0.2 | 2 | 8 | 0 | 0 | 2 | 3 | 100 | 1 | 5 | FluentAssertions.Execution |
| XUnit2TestFramework | 0.2 | 6 | 48 | 1 | 14.29 | 4 | 5 | 66.67 | 1 | 11 | FluentAssertions.Execution |
| MSpecFramework | 0.2 | 2 | 8 | 0 | 0 | 2 | 3 | 100 | 1 | 5 | FluentAssertions.Execution |
| FallbackTestFramework | 0.2 | 2 | 10 | 6 | 75 | 2 | 3 | 100 | 1 | 7 | FluentAssertions.Execution |
| MSTestFrameworkV2 | 0.2 | 2 | 8 | 0 | 0 | 2 | 3 | 100 | 1 | 5 | FluentAssertions.Execution |
| Digit | 0.2 | 16 | 88 | 0 | 0 | 6 | 10 | 100 | 1 | 5 | FluentAssertions.Equivalency |
| PredicateLambdaExpressionValueForm atter+ConstantSubExpressionReducti onVisitor | 0.2 | 13 | 117 | 0 | 0 | 10 | 19 | 100 | 1 | 13 | FluentAssertions.Formatting |
| PredicateLambdaExpressionValueForm atter+AndOperatorChainExtractor | 0.2 | 8 | 46 | 0 | 0 | 4 | 5 | 100 | 1 | 9 | FluentAssertions.Formatting |
| Failure | 0.2 | 5 | 17 | 0 | 0 | 3 | 3 | 100 | 1 | 6 | FluentAssertions.Xml.Equivalency |
| XmlIterator | 0.2 | 25 | 139 | 2 | 7.41 | 16 | 16 | 100 | 1 | 9 | FluentAssertions.Xml.Equivalency |
| Node | 0.2 | 29 | 259 | 0 | 0 | 12 | 36 | 100 | 1 | 23 | FluentAssertions.Xml.Equivalency |
| CollectionMemberSelectionRuleDecor ator | 0.2 | 5 | 31 | 0 | 0 | 4 | 4 | 100 | 1 | 9 | FluentAssertions.Equivalency .Selection |
| CollectionMemberOrderingRuleDecora tor | 0.2 | 4 | 26 | 0 | 0 | 3 | 3 | 100 | 1 | 7 | FluentAssertions.Equivalency .Ordering |
| DoubleAssertions | 0.19 | 4 | 27 | 0 | 0 | 4 | 5 | 100 | 2 | 10 | FluentAssertions.Numeric |
| SingleAssertions | 0.19 | 4 | 27 | 0 | 0 | 4 | 5 | 100 | 2 | 10 | FluentAssertions.Numeric |
| DecimalAssertions | 0.19 | 5 | 30 | 0 | 0 | 4 | 5 | 100 | 2 | 11 | FluentAssertions.Numeric |
| GenericCollectionAssertions<T> | 0.19 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 2 | 6 | FluentAssertions.Collections |
| SingleLineCommentParsingStrategy | 0.19 | 11 | 82 | 0 | 0 | 7 | 12 | 100 | 1 | 8 | FluentAssertions .CallerIdentification |
| AddNonEmptySymbolParsingStrategy | 0.19 | 11 | 81 | 2 | 15.38 | 8 | 10 | 100 | 1 | 9 | FluentAssertions .CallerIdentification |
| SemicolonParsingStrategy | 0.19 | 5 | 31 | 0 | 0 | 4 | 6 | 100 | 1 | 7 | FluentAssertions .CallerIdentification |
| MultiLineCommentParsingStrategy | 0.19 | 14 | 107 | 0 | 0 | 8 | 17 | 100 | 1 | 9 | FluentAssertions .CallerIdentification |
| AwaitParsingStrategy | 0.19 | 13 | 100 | 0 | 0 | 9 | 13 | 100 | 1 | 9 | FluentAssertions .CallerIdentification |
| ShouldCallParsingStrategy | 0.19 | 14 | 124 | 0 | 0 | 8 | 13 | 100 | 1 | 9 | FluentAssertions .CallerIdentification |
| QuotesParsingStrategy | 0.19 | 18 | 195 | 0 | 0 | 14 | 23 | 100 | 1 | 9 | FluentAssertions .CallerIdentification |
| StringWildcardMatchingStrategy | 0.19 | 21 | 173 | 9 | 30 | 17 | 23 | 100 | 1 | 15 | FluentAssertions.Primitives |
| StringEqualityStrategy | 0.19 | 65 | 628 | 25 | 27.78 | 28 | 42 | 100 | 1 | 22 | FluentAssertions.Primitives |
| NegatedStringStartStrategy | 0.19 | 6 | 56 | 0 | 0 | 5 | 6 | 100 | 1 | 9 | FluentAssertions.Primitives |
| StringStartStrategy | 0.19 | 11 | 100 | 0 | 0 | 7 | 9 | 81.82 | 1 | 11 | FluentAssertions.Primitives |
| StringValidator | 0.19 | 14 | 103 | 0 | 0 | 9 | 13 | 100 | 1 | 11 | FluentAssertions.Primitives |
| StringSyntaxAttribute | 0.19 | 8 | 29 | 0 | 0 | 0 | 4 | - | 1 | 11 | System.Diagnostics.CodeAnalysis |
| StringAssertions<TAssertions>+<>O | 0.19 | 0 | 0 | - | - | - | 0 | - | 1 | 6 | FluentAssertions.Primitives |
| AssertionRuleEquivalencyStep <TSubject> | 0.19 | 32 | 276 | 12 | 27.27 | 21 | 33 | 100 | 1 | 29 | FluentAssertions.Equivalency.Steps |
| ExceptionAssertions<TException >+ExceptionMessageAssertion | 0.19 | 19 | 109 | 0 | 0 | 4 | 15 | 100 | 1 | 23 | FluentAssertions.Specialized |
| AssertionContext<TSubject> | 0.19 | 14 | 65 | 0 | 0 | 9 | 9 | 78.57 | 1 | 10 | FluentAssertions.Equivalency.Steps |
| RecordedEvent | 0.18 | 7 | 23 | 12 | 63.16 | 4 | 4 | 100 | 1 | 8 | FluentAssertions.Events |
| EventHandlerFactory | 0.18 | 49 | 271 | 29 | 37.18 | 12 | 16 | 91.84 | 1 | 22 | FluentAssertions.Events |
| <>f__AnonymousType0<<rule>j__TPar, <match>j__TPar> | 0.18 | 0 | 95 | - | - | - | 14 | - | 1 | 12 | |
| ValueTypeEquivalencyStep | 0.18 | 10 | 113 | 0 | 0 | 4 | 11 | 100 | 1 | 22 | FluentAssertions.Equivalency.Steps |
| StructuralEqualityEquivalencyStep | 0.18 | 36 | 337 | 2 | 5.26 | 15 | 32 | 100 | 1 | 31 | FluentAssertions.Equivalency.Steps |
| StringEqualityEquivalencyStep | 0.18 | 21 | 157 | 0 | 0 | 9 | 14 | 100 | 1 | 21 | FluentAssertions.Equivalency.Steps |
| XDocumentEquivalencyStep | 0.18 | 4 | 29 | 0 | 0 | 1 | 2 | 100 | 1 | 15 | FluentAssertions.Equivalency.Steps |
| MultiDimensionalArrayEquivalencySt ep | 0.18 | 28 | 254 | 0 | 0 | 14 | 20 | 100 | 1 | 23 | FluentAssertions.Equivalency |
| XElementEquivalencyStep | 0.18 | 4 | 29 | 0 | 0 | 1 | 2 | 100 | 1 | 15 | FluentAssertions.Equivalency.Steps |
| GenericDictionaryEquivalencyStep | 0.18 | 58 | 563 | 6 | 9.38 | 30 | 54 | 100 | 1 | 44 | FluentAssertions.Equivalency.Steps |
| EnumEqualityStep | 0.18 | 35 | 383 | 0 | 0 | 13 | 27 | 97.14 | 1 | 30 | FluentAssertions.Equivalency.Steps |
| DictionaryEquivalencyStep | 0.18 | 19 | 261 | 0 | 0 | 14 | 29 | 78.95 | 1 | 35 | FluentAssertions.Equivalency.Steps |
| GenericEnumerableEquivalencyStep | 0.18 | 33 | 320 | 3 | 8.33 | 19 | 36 | 96.97 | 1 | 40 | FluentAssertions.Equivalency.Steps |
| SimpleEqualityEquivalencyStep | 0.18 | 4 | 41 | 0 | 0 | 3 | 6 | 75 | 1 | 16 | FluentAssertions.Equivalency.Steps |
| RunAllUserStepsEquivalencyStep | 0.18 | 7 | 46 | 0 | 0 | 3 | 8 | 100 | 1 | 13 | FluentAssertions.Equivalency.Steps |
| ReferenceEqualityEquivalencyStep | 0.18 | 1 | 17 | 0 | 0 | 2 | 4 | 100 | 1 | 7 | FluentAssertions.Equivalency.Steps |
| XAttributeEquivalencyStep | 0.18 | 4 | 29 | 0 | 0 | 1 | 2 | 100 | 1 | 15 | FluentAssertions.Equivalency.Steps |
| <>f__AnonymousType5<<Type>j__TPar, <Method>j__TPar> | 0.18 | 0 | 95 | - | - | - | 14 | - | 1 | 12 | |
| <>f__AnonymousType3<<type>j__TPar, <method>j__TPar> | 0.18 | 0 | 95 | - | - | - | 14 | - | 1 | 12 | |
| <>f__AnonymousType4<<< >h__TransparentIdentifier0>j__TPar ,<methodParameters>j__TPar> | 0.18 | 0 | 95 | - | - | - | 14 | - | 1 | 12 | |
| AttributeBasedFormatter+<>O | 0.18 | 0 | 0 | - | - | - | 0 | - | 1 | 5 | FluentAssertions.Formatting |
| CallerIdentifier+StackFrameReferen ce | 0.18 | 11 | 60 | 0 | 0 | 5 | 7 | 100 | 1 | 11 | FluentAssertions |
| CallerStatementBuilder | 0.18 | 23 | 192 | 0 | 0 | 10 | 26 | 100 | 1 | 27 | FluentAssertions .CallerIdentification |
| CustomAssertionsAssemblyAttribute | 0.18 | 0 | 4 | 0 | - | 0 | 1 | - | 1 | 3 | FluentAssertions |
| CustomAssertionAttribute | 0.18 | 0 | 4 | 0 | - | 0 | 1 | - | 1 | 3 | FluentAssertions |
| FilteredEventRecording | 0.18 | 14 | 146 | 0 | 0 | 6 | 19 | 92.86 | 1 | 20 | FluentAssertions.Events |
| <>f__AnonymousType2<<< >h__TransparentIdentifier0>j__TPar ,<event>j__TPar> | 0.18 | 0 | 95 | - | - | - | 14 | - | 1 | 12 | |
| <>f__AnonymousType1<<eventName >j__TPar,<recording>j__TPar> | 0.18 | 0 | 95 | - | - | - | 14 | - | 1 | 12 | |
| MethodInfoSelectorAssertions+< >c__12<TAttribute> | 0.18 | 0 | 7 | - | - | - | 2 | - | 1 | 5 | FluentAssertions.Types |
| MethodInfoSelectorAssertions+< >c__10<TAttribute> | 0.18 | 0 | 7 | - | - | - | 2 | - | 1 | 5 | FluentAssertions.Types |
| ExceptionExtensions | 0.18 | 4 | 22 | 0 | 0 | 2 | 3 | 100 | 1 | 6 | FluentAssertions.Common |
| EnumerableEquivalencyValidatorExte nsions | 0.18 | 3 | 161 | 0 | 0 | 5 | 7 | 100 | 1 | 10 | FluentAssertions.Equivalency.Steps |
| EquivalencyValidationContextExtens ions | 0.18 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 7 | FluentAssertions.Equivalency.Steps |
| SByteValueFormatter | 0.18 | 2 | 26 | 7 | 77.78 | 2 | 3 | 100 | 1 | 11 | FluentAssertions.Formatting |
| ByteValueFormatter | 0.18 | 2 | 27 | 7 | 77.78 | 2 | 3 | 100 | 1 | 11 | FluentAssertions.Formatting |
| XmlNodeFormatter | 0.18 | 5 | 41 | 0 | 0 | 3 | 4 | 100 | 1 | 11 | FluentAssertions.Xml |
| AggregateExceptionValueFormatter | 0.18 | 12 | 88 | 7 | 36.84 | 4 | 9 | 100 | 1 | 17 | FluentAssertions.Formatting |
| AttributeBasedFormatter | 0.18 | 35 | 369 | 7 | 16.67 | 17 | 47 | 100 | 1 | 33 | FluentAssertions.Formatting |
| DateTimeOffsetValueFormatter | 0.18 | 39 | 335 | 8 | 17.02 | 30 | 37 | 94.87 | 1 | 17 | FluentAssertions.Formatting |
| Int32ValueFormatter | 0.18 | 2 | 24 | 7 | 77.78 | 2 | 3 | 100 | 1 | 11 | FluentAssertions.Formatting |
| Int16ValueFormatter | 0.18 | 2 | 26 | 7 | 77.78 | 2 | 3 | 100 | 1 | 11 | FluentAssertions.Formatting |
| MultidimensionalArrayFormatter | 0.18 | 34 | 246 | 9 | 20.93 | 14 | 23 | 100 | 1 | 16 | FluentAssertions.Formatting |
| Int64ValueFormatter | 0.18 | 2 | 26 | 7 | 77.78 | 2 | 3 | 100 | 1 | 11 | FluentAssertions.Formatting |
| GuidValueFormatter | 0.18 | 2 | 27 | 7 | 77.78 | 2 | 5 | 100 | 1 | 8 | FluentAssertions.Formatting |
| UInt64ValueFormatter | 0.18 | 2 | 26 | 7 | 77.78 | 2 | 3 | 100 | 1 | 11 | FluentAssertions.Formatting |
| ExceptionValueFormatter | 0.18 | 2 | 21 | 7 | 77.78 | 2 | 3 | 100 | 1 | 8 | FluentAssertions.Formatting |
| Formatter+ObjectGraph | 0.18 | 12 | 72 | 0 | 0 | 6 | 6 | 91.67 | 1 | 13 | FluentAssertions.Formatting |
| ExpressionValueFormatter | 0.18 | 2 | 24 | 7 | 77.78 | 2 | 3 | 100 | 1 | 9 | FluentAssertions.Formatting |
| TimeSpanValueFormatter | 0.18 | 40 | 273 | 7 | 14.89 | 20 | 23 | 100 | 1 | 18 | FluentAssertions.Formatting |
| TaskFormatter | 0.18 | 5 | 48 | 0 | 0 | 3 | 5 | 60 | 1 | 11 | FluentAssertions.Formatting |
| UInt16ValueFormatter | 0.18 | 2 | 26 | 7 | 77.78 | 2 | 3 | 100 | 1 | 11 | FluentAssertions.Formatting |
| UInt32ValueFormatter | 0.18 | 2 | 26 | 7 | 77.78 | 2 | 3 | 100 | 1 | 11 | FluentAssertions.Formatting |
| StringValueFormatter | 0.18 | 3 | 29 | 7 | 70 | 2 | 5 | 100 | 1 | 8 | FluentAssertions.Formatting |
| PredicateLambdaExpressionValueForm atter | 0.18 | 14 | 91 | 24 | 63.16 | 6 | 12 | 85.71 | 1 | 23 | FluentAssertions.Formatting |
| NullValueFormatter | 0.18 | 2 | 18 | 7 | 77.78 | 2 | 3 | 100 | 1 | 8 | FluentAssertions.Formatting |
| SingleValueFormatter | 0.18 | 9 | 67 | 7 | 43.75 | 5 | 7 | 100 | 1 | 11 | FluentAssertions.Formatting |
| PropertyInfoFormatter | 0.18 | 2 | 21 | 7 | 77.78 | 2 | 3 | 100 | 1 | 9 | FluentAssertions.Formatting |
| EnumValueFormatter | 0.18 | 5 | 64 | 8 | 61.54 | 2 | 3 | 100 | 1 | 15 | FluentAssertions.Formatting |
| DictionaryValueFormatter | 0.18 | 29 | 340 | 11 | 27.5 | 11 | 43 | 100 | 1 | 26 | FluentAssertions.Formatting |
| DefaultValueFormatter | 0.18 | 44 | 331 | 19 | 30.16 | 22 | 41 | 97.73 | 1 | 29 | FluentAssertions.Formatting |
| DecimalValueFormatter | 0.18 | 2 | 26 | 7 | 77.78 | 2 | 3 | 100 | 1 | 11 | FluentAssertions.Formatting |
| XmlReaderValueFormatter | 0.18 | 6 | 40 | 7 | 53.85 | 3 | 4 | 100 | 1 | 10 | FluentAssertions.Formatting |
| XElementValueFormatter | 0.18 | 11 | 83 | 9 | 45 | 6 | 8 | 100 | 1 | 12 | FluentAssertions.Formatting |
| XAttributeValueFormatter | 0.18 | 2 | 21 | 7 | 77.78 | 2 | 3 | 100 | 1 | 8 | FluentAssertions.Formatting |
| XDocumentValueFormatter | 0.18 | 5 | 43 | 0 | 0 | 3 | 5 | 100 | 1 | 10 | FluentAssertions.Formatting |
| DoubleValueFormatter | 0.18 | 11 | 77 | 7 | 38.89 | 8 | 11 | 100 | 1 | 13 | FluentAssertions.Formatting |
| EnumerableValueFormatter | 0.18 | 19 | 136 | 15 | 44.12 | 8 | 18 | 100 | 1 | 18 | FluentAssertions.Formatting |
| WhoseValueConstraint<TCollection ,TKey,TValue,TAssertions> | 0.18 | 3 | 12 | 6 | 66.67 | 2 | 2 | 100 | 1 | 8 | FluentAssertions.Collections |
| DictionaryHelpers | 0.18 | 48 | 361 | 0 | 0 | 7 | 56 | 93.75 | 1 | 20 | FluentAssertions.Common |
| ExcludeNonBrowsableMembersRule | 0.17 | 3 | 26 | 0 | 0 | 2 | 5 | 66.67 | 1 | 13 | FluentAssertions.Equivalency .Selection |
| IncludeMemberByPredicateSelectionR ule | 0.17 | 15 | 100 | 2 | 11.76 | 7 | 11 | 100 | 1 | 25 | FluentAssertions.Equivalency .Selection |
| ExcludeMemberByPredicateSelectionR ule | 0.17 | 7 | 44 | 2 | 22.22 | 4 | 5 | 100 | 1 | 18 | FluentAssertions.Equivalency .Selection |
| MustMatchByNameRule | 0.17 | 13 | 119 | 3 | 18.75 | 11 | 17 | 100 | 1 | 18 | FluentAssertions.Equivalency .Matching |
| TryMatchByNameRule | 0.17 | 7 | 66 | 2 | 22.22 | 6 | 10 | 100 | 1 | 15 | FluentAssertions.Equivalency .Matching |
| EqualityStrategyProvider | 0.17 | 57 | 406 | 2 | 3.39 | 29 | 55 | 94.74 | 1 | 21 | FluentAssertions.Equivalency |
| ByteArrayOrderingRule | 0.17 | 2 | 24 | 0 | 0 | 3 | 5 | 100 | 1 | 12 | FluentAssertions.Equivalency .Ordering |
| MatchAllOrderingRule | 0.17 | 2 | 16 | 3 | 60 | 2 | 3 | 100 | 1 | 6 | FluentAssertions.Equivalency .Ordering |
| PredicateBasedOrderingRule | 0.17 | 9 | 59 | 0 | 0 | 8 | 11 | 100 | 1 | 13 | FluentAssertions.Equivalency .Ordering |
| AllPropertiesSelectionRule | 0.17 | 5 | 53 | 7 | 58.33 | 3 | 6 | 100 | 1 | 19 | FluentAssertions.Equivalency .Selection |
| StringBuilderTraceWriter | 0.17 | 15 | 102 | 0 | 0 | 6 | 8 | 100 | 1 | 14 | FluentAssertions.Equivalency .Tracing |
| SelfReferenceEquivalencyOptions <TSelf>+Restriction<TMember> | 0.17 | 7 | 74 | 12 | 63.16 | 3 | 3 | 100 | 1 | 27 | FluentAssertions.Equivalency |
| AllFieldsSelectionRule | 0.17 | 5 | 45 | 7 | 58.33 | 3 | 6 | 100 | 1 | 19 | FluentAssertions.Equivalency .Selection |
| EqualityComparerEquivalencyStep<T> | 0.17 | 9 | 141 | 0 | 0 | 5 | 10 | 100 | 1 | 26 | FluentAssertions.Equivalency.Steps |
| DictionaryInterfaceInfo | 0.17 | 41 | 370 | 23 | 35.94 | 17 | 41 | 92.68 | 1 | 26 | FluentAssertions.Equivalency.Steps |
| GenericDictionaryEquivalencyStep+K eyDifference<TSubjectKey ,TExpectedKey> | 0.17 | 5 | 17 | 0 | 0 | 3 | 3 | 100 | 1 | 5 | FluentAssertions.Equivalency.Steps |
| GenericCollectionAssertions <TCollection,T,TAssertions>+<>c__6 <TExpectation> | 0.17 | 0 | 7 | - | - | - | 2 | - | 1 | 6 | FluentAssertions.Collections |
| GivenSelectorExtensions | 0.17 | 22 | 364 | 0 | 0 | 9 | 50 | 100 | 1 | 18 | FluentAssertions.Execution |
| BooleanAssertions | 0.16 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 6 | FluentAssertions.Primitives |
| ExecutionTimeAssertions | 0.16 | 36 | 537 | 86 | 70.49 | 18 | 36 | 100 | 1 | 23 | FluentAssertions.Specialized |
| AssemblyAssertions | 0.16 | 40 | 438 | 65 | 61.9 | 15 | 24 | 97.5 | 1 | 28 | FluentAssertions.Types |
| ActionAssertions | 0.16 | 26 | 183 | 36 | 58.06 | 11 | 17 | 100 | 1 | 22 | FluentAssertions.Specialized |
| GenericDictionaryAssertions <TCollection,TKey,TValue> | 0.16 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 8 | FluentAssertions.Collections |
| NonGenericAsyncFunctionAssertions | 0.16 | 33 | 713 | 50 | 60.24 | 11 | 53 | 96.97 | 1 | 35 | FluentAssertions.Specialized |
| FunctionAssertions<T> | 0.16 | 14 | 108 | 33 | 70.21 | 8 | 8 | 100 | 1 | 18 | FluentAssertions.Specialized |
| MemberExecutionTime<T> | 0.16 | 2 | 41 | 7 | 77.78 | 1 | 5 | 100 | 1 | 12 | FluentAssertions.Specialized |
| StringCollectionAssertions | 0.16 | 1 | 6 | 3 | 75 | 1 | 1 | 100 | 1 | 8 | FluentAssertions.Collections |
| EventMonitor<T> | 0.16 | 49 | 358 | 0 | 0 | 20 | 41 | 93.88 | 1 | 36 | FluentAssertions.Events |
| MethodInfoSelectorAssertions | 0.16 | 57 | 521 | 125 | 68.68 | 19 | 37 | 98.25 | 1 | 38 | FluentAssertions.Types |
| ConstructorInfoAssertions | 0.16 | 4 | 23 | 4 | 50 | 4 | 4 | 100 | 1 | 11 | FluentAssertions.Types |
| NullableByteAssertions | 0.16 | 3 | 22 | 0 | 0 | 3 | 4 | 100 | 1 | 12 | FluentAssertions.Numeric |
| PropertyInfoSelectorAssertions | 0.16 | 39 | 359 | 73 | 65.18 | 17 | 35 | 97.44 | 1 | 30 | FluentAssertions.Types |
| BufferedStreamAssertions | 0.16 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 7 | FluentAssertions.Streams |
| StreamAssertions | 0.16 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 6 | FluentAssertions.Streams |
| AggregateExceptionExtractor | 0.16 | 10 | 85 | 0 | 0 | 6 | 9 | 100 | 1 | 14 | FluentAssertions |
| TypeSelectorAssertions | 0.16 | 70 | 878 | 181 | 72.11 | 19 | 57 | 91.43 | 1 | 27 | FluentAssertions.Types |
| UInt32Assertions | 0.16 | 5 | 39 | 0 | 0 | 5 | 8 | 100 | 1 | 11 | FluentAssertions.Numeric |
| UInt16Assertions | 0.16 | 5 | 37 | 0 | 0 | 5 | 8 | 100 | 1 | 11 | FluentAssertions.Numeric |
| SByteAssertions | 0.16 | 3 | 22 | 0 | 0 | 3 | 4 | 100 | 1 | 10 | FluentAssertions.Numeric |
| NullableInt16Assertions | 0.16 | 5 | 37 | 0 | 0 | 5 | 8 | 100 | 1 | 13 | FluentAssertions.Numeric |
| Int64Assertions | 0.16 | 5 | 53 | 0 | 0 | 7 | 10 | 100 | 1 | 11 | FluentAssertions.Numeric |
| NullableDecimalAssertions | 0.16 | 5 | 30 | 0 | 0 | 4 | 5 | 100 | 1 | 13 | FluentAssertions.Numeric |
| NullableDoubleAssertions | 0.16 | 4 | 27 | 0 | 0 | 4 | 5 | 100 | 1 | 12 | FluentAssertions.Numeric |
| NullableUInt16Assertions | 0.16 | 5 | 37 | 0 | 0 | 5 | 8 | 100 | 1 | 13 | FluentAssertions.Numeric |
| NullableUInt32Assertions | 0.16 | 5 | 39 | 0 | 0 | 5 | 8 | 100 | 1 | 13 | FluentAssertions.Numeric |
| NullableUInt64Assertions | 0.16 | 5 | 43 | 0 | 0 | 5 | 8 | 100 | 1 | 13 | FluentAssertions.Numeric |
| NullableSingleAssertions | 0.16 | 4 | 27 | 0 | 0 | 4 | 5 | 100 | 1 | 12 | FluentAssertions.Numeric |
| NullableInt32Assertions | 0.16 | 5 | 47 | 0 | 0 | 7 | 10 | 100 | 1 | 13 | FluentAssertions.Numeric |
| NullableInt64Assertions | 0.16 | 5 | 53 | 0 | 0 | 7 | 10 | 100 | 1 | 13 | FluentAssertions.Numeric |
| NullableSByteAssertions | 0.16 | 3 | 22 | 0 | 0 | 3 | 4 | 100 | 1 | 12 | FluentAssertions.Numeric |
| Int32Assertions | 0.16 | 5 | 47 | 0 | 0 | 7 | 10 | 100 | 1 | 11 | FluentAssertions.Numeric |
| NullableDateTimeOffsetAssertions | 0.16 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 7 | FluentAssertions.Primitives |
| DateTimeAssertions | 0.16 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 6 | FluentAssertions.Primitives |
| NullableBooleanAssertions | 0.16 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 7 | FluentAssertions.Primitives |
| DateTimeOffsetAssertions | 0.16 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 6 | FluentAssertions.Primitives |
| NullableDateTimeAssertions | 0.16 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 7 | FluentAssertions.Primitives |
| HttpResponseMessageAssertions | 0.16 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 7 | FluentAssertions.Primitives |
| GuidAssertions | 0.16 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 6 | FluentAssertions.Primitives |
| UInt64Assertions | 0.16 | 5 | 43 | 0 | 0 | 5 | 8 | 100 | 1 | 11 | FluentAssertions.Numeric |
| Int16Assertions | 0.16 | 5 | 37 | 0 | 0 | 5 | 8 | 100 | 1 | 11 | FluentAssertions.Numeric |
| ComparableTypeAssertions<T> | 0.16 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 6 | FluentAssertions.Numeric |
| ByteAssertions | 0.16 | 3 | 22 | 0 | 0 | 3 | 4 | 100 | 1 | 10 | FluentAssertions.Numeric |
| SimpleTimeSpanAssertions | 0.16 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 6 | FluentAssertions.Primitives |
| NullableGuidAssertions | 0.16 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 7 | FluentAssertions.Primitives |
| NullableSimpleTimeSpanAssertions | 0.16 | 1 | 6 | 0 | 0 | 1 | 1 | 100 | 1 | 7 | FluentAssertions.Primitives |
| SkipLocalsInitAttribute | 0.15 | 0 | 4 | - | - | - | 1 | - | 0 | 4 | System.Runtime.CompilerServices |
| RequiredMemberAttribute | 0.15 | 0 | 4 | - | - | - | 1 | - | 0 | 4 | System.Runtime.CompilerServices |
| ModuleInitializerAttribute | 0.15 | 1 | 5 | 0 | 0 | 0 | 1 | - | 0 | 4 | System.Runtime.CompilerServices |
| MemberNotNullAttribute | 0.15 | 5 | 22 | 0 | 0 | 0 | 3 | - | 0 | 10 | System.Diagnostics.CodeAnalysis |
| IsExternalInit | 0.15 | 0 | 0 | - | - | - | 0 | - | 0 | 3 | System.Runtime.CompilerServices |
| FluentDateTimeExtensions | 0.15 | 46 | 405 | 103 | 69.13 | 40 | 48 | 100 | 0 | 15 | FluentAssertions.Extensions |
| SubjectInfoExtensions | 0.15 | 4 | 40 | 24 | 85.71 | 4 | 4 | 50 | 0 | 5 | FluentAssertions.Equivalency |
| BooleanAssertionsExtensions | 0.15 | 2 | 41 | 0 | 0 | 1 | 1 | - | 0 | 12 | FluentAssertions.Primitives |
| OccurrenceConstraintExtensions | 0.15 | 3 | 21 | 12 | 80 | 3 | 3 | 100 | 0 | 7 | FluentAssertions.Extensions |
| RefSafetyRulesAttribute | 0.15 | 0 | 7 | - | - | - | 1 | - | 0 | 6 | System.Runtime.CompilerServices |
| InterpolatedStringHandlerArgumentA ttribute | 0.15 | 5 | 24 | 0 | 0 | 0 | 3 | - | 0 | 10 | System.Runtime.CompilerServices |
| InterpolatedStringHandlerAttribute | 0.15 | 0 | 4 | - | - | - | 1 | - | 0 | 4 | System.Runtime.CompilerServices |
| RequiresPreviewFeaturesAttribute | 0.15 | 6 | 23 | 0 | 0 | 0 | 5 | - | 0 | 9 | System.Runtime.Versioning |
| CompilerFeatureRequiredAttribute | 0.15 | 5 | 18 | 0 | 0 | 0 | 4 | - | 0 | 10 | System.Runtime.CompilerServices |
| MemberNotNullWhenAttribute | 0.15 | 8 | 33 | 0 | 0 | 0 | 4 | - | 0 | 11 | System.Diagnostics.CodeAnalysis |
| MoreThan | 0.15 | 4 | 12 | 0 | 0 | 4 | 4 | 100 | 0 | 5 | FluentAssertions |
| NumericAssertionsExtensions | 0.15 | 279 | 2325 | 608 | 68.55 | 126 | 160 | 98.57 | 0 | 34 | FluentAssertions |
| FluentActions | 0.15 | 6 | 14 | 20 | 76.92 | 6 | 6 | 100 | 0 | 9 | FluentAssertions |
| LessThan | 0.15 | 3 | 9 | 0 | 0 | 3 | 3 | 100 | 0 | 5 | FluentAssertions |
| XmlAssertionExtensions | 0.15 | 2 | 14 | 0 | 0 | 2 | 2 | 100 | 0 | 8 | FluentAssertions |
| AllTypes | 0.15 | 1 | 7 | 5 | 83.33 | 1 | 1 | 100 | 0 | 4 | FluentAssertions.Types |
| ObjectAssertionsExtensions | 0.15 | 26 | 234 | 43 | 62.32 | 7 | 18 | 88.46 | 0 | 33 | FluentAssertions |
| TypeEnumerableExtensions | 0.15 | 15 | 123 | 45 | 75 | 15 | 15 | 100 | 0 | 10 | FluentAssertions |
| ExceptionAssertionsExtensions | 0.15 | 9 | 793 | 103 | 91.96 | 1 | 71 | 100 | 0 | 24 | FluentAssertions |
| UnscopedRefAttribute | 0.15 | 0 | 4 | - | - | - | 1 | - | 0 | 4 | System.Diagnostics.CodeAnalysis |
| AsyncAssertionsExtensions | 0.15 | 8 | 280 | 31 | 79.49 | 0 | 20 | 100 | 0 | 23 | FluentAssertions |
| SetsRequiredMembersAttribute | 0.15 | 0 | 4 | - | - | - | 1 | - | 0 | 4 | System.Diagnostics.CodeAnalysis |
| SubsequentOrderingGenericCollectio nAssertions<TCollection,T> | 0.15 | 1 | 7 | 0 | 0 | 1 | 1 | 0 | 0 | 8 | FluentAssertions.Collections |
| GenericCollectionAssertions <TCollection,T> | 0.15 | 1 | 6 | 0 | 0 | 1 | 1 | 0 | 0 | 6 | FluentAssertions.Collections |
| EventRaisingExtensions | 0.15 | 54 | 420 | 24 | 30.77 | 15 | 42 | 96.3 | 0 | 34 | FluentAssertions |
| ValueFormatterAttribute | 0.15 | 0 | 4 | 0 | - | 0 | 1 | - | 0 | 3 | FluentAssertions.Formatting |
| EnumAssertionsExtensions | 0.15 | 2 | 14 | 8 | 80 | 2 | 2 | 100 | 0 | 9 | FluentAssertions |
Types Metrics : Code Members and Inheritance
| Type Name | # Instance Methods | Nb Static Methods | Nb Properties | # Fields | # Children Classes | Depth Of Inheritance Tree | Type Namespace |
|---|---|---|---|---|---|---|---|
| AssertionScope | 43 | 5 | 7 | 12 | 0 | 1 | FluentAssertions.Execution |
| Continuation | 2 | 1 | 1 | 2 | 0 | 1 | FluentAssertions.Execution |
| INode | 11 | 0 | 10 | 0 | - | - | FluentAssertions.Equivalency |
| FormattedObjectGraph | 13 | 2 | 3 | 5 | 0 | 1 | FluentAssertions.Formatting |
| AndConstraint<T> | 2 | 0 | 1 | 1 | 2 | 1 | FluentAssertions |
| ReferenceTypeAssertions<TSubject ,TAssertions> | 18 | 0 | 2 | 1 | 45 | 1 | FluentAssertions.Primitives |
| Execute | 0 | 1 | 1 | 0 | 0 | 1 | FluentAssertions.Execution |
| FormattingContext | 3 | 0 | 1 | 1 | 0 | 1 | FluentAssertions.Formatting |
| FormatChild | 4 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Formatting |
| IEquivalencyOptions | 17 | 0 | 16 | 0 | - | - | FluentAssertions.Equivalency |
| Comparands | 11 | 0 | 4 | 3 | 0 | 1 | FluentAssertions.Equivalency |
| IValueFormatter | 2 | 0 | 0 | 0 | - | - | FluentAssertions.Formatting |
| OccurrenceConstraint | 5 | 0 | 2 | 1 | 5 | 1 | FluentAssertions |
| IEquivalencyValidationContext | 9 | 0 | 4 | 0 | - | - | FluentAssertions.Equivalency |
| IAssertionScope | 13 | 0 | 1 | 0 | - | - | FluentAssertions.Execution |
| NumericAssertions<T,TAssertions> | 24 | 0 | 1 | 1 | 25 | 1 | FluentAssertions.Numeric |
| IMember | 6 | 0 | 5 | 0 | - | - | FluentAssertions.Equivalency |
| Guard | 0 | 12 | 0 | 0 | 0 | 1 | FluentAssertions.Common |
| TypeExtensions | 0 | 56 | 0 | 6 | 0 | 1 | FluentAssertions.Common |
| CallerArgumentExpressionAttribute | 2 | 0 | 1 | 1 | 0 | 2 | System.Runtime.CompilerServices |
| Guard+ValidatedNotNullAttribute | 1 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Common |
| IObjectInfo | 6 | 0 | 5 | 0 | - | - | FluentAssertions.Equivalency |
| CSharpAccessModifier | - | - | - | - | - | - | FluentAssertions.Common |
| IEquivalencyValidator | 1 | 0 | 0 | 0 | - | - | FluentAssertions.Equivalency |
| EquivalencyResult | - | - | - | - | - | - | FluentAssertions.Equivalency |
| Reason | 5 | 0 | 2 | 2 | 0 | 1 | FluentAssertions.Execution |
| Services | 0 | 12 | 4 | 6 | 0 | 1 | FluentAssertions.Common |
| NullableAttribute | 2 | 0 | 0 | 1 | 0 | 2 | System.Runtime.CompilerServices |
| IEquivalencyStep | 1 | 0 | 0 | 0 | - | - | FluentAssertions.Equivalency |
| OrderStrictness | - | - | - | - | - | - | FluentAssertions.Equivalency |
| GenericCollectionAssertions <TCollection,T,TAssertions> | 106 | 11 | 1 | 0 | 10 | 2 | FluentAssertions.Collections |
| StringExtensions | 0 | 13 | 0 | 0 | 0 | 1 | FluentAssertions.Common |
| ParsingState | - | - | - | - | - | - | FluentAssertions .CallerIdentification |
| GetSubjectId | 4 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Equivalency |
| MemberVisibility | - | - | - | - | - | - | FluentAssertions.Equivalency |
| AssertionExtensions | 0 | 93 | 0 | 1 | 0 | 1 | FluentAssertions |
| NullableNumericAssertions<T ,TAssertions> | 6 | 0 | 0 | 0 | 12 | 2 | FluentAssertions.Numeric |
| NumericAssertions<T> | 1 | 0 | 0 | 0 | 11 | 2 | FluentAssertions.Numeric |
| IMemberSelectionRule | 2 | 0 | 1 | 0 | - | - | FluentAssertions.Equivalency |
| MemberSelectionContext | 4 | 0 | 3 | 3 | 0 | 1 | FluentAssertions.Equivalency |
| ITestFramework | 2 | 0 | 1 | 0 | - | - | FluentAssertions.Execution |
| ITimer | 1 | 0 | 1 | 0 | - | - | FluentAssertions.Common |
| NullableContextAttribute | 1 | 0 | 0 | 1 | 0 | 2 | System.Runtime.CompilerServices |
| NullableNumericAssertions<T> | 1 | 0 | 0 | 0 | 11 | 3 | FluentAssertions.Numeric |
| IParsingStrategy | 3 | 0 | 0 | 0 | - | - | FluentAssertions .CallerIdentification |
| ContinuedAssertionScope | 15 | 0 | 1 | 2 | 0 | 1 | FluentAssertions.Execution |
| GivenSelector<T> | 7 | 0 | 0 | 3 | 0 | 1 | FluentAssertions.Execution |
| EmbeddedAttribute | 1 | 0 | 0 | 0 | 0 | 2 | Microsoft.CodeAnalysis |
| IOrderingRule | 1 | 0 | 0 | 0 | - | - | FluentAssertions.Equivalency |
| ITraceWriter | 3 | 0 | 0 | 0 | - | - | FluentAssertions.Equivalency .Tracing |
| SelfReferenceEquivalencyOptions <TSelf> | 72 | 0 | 17 | 16 | 2 | 1 | FluentAssertions.Equivalency |
| AndWhichConstraint <TParentConstraint,TMatchedElement > | 4 | 1 | 2 | 1 | 0 | 2 | FluentAssertions |
| Predicate<TValue> | 5 | 0 | 2 | 3 | 0 | 1 | FluentAssertions.Collections .MaximumMatching |
| Element<TValue> | 3 | 0 | 2 | 2 | 0 | 1 | FluentAssertions.Collections .MaximumMatching |
| IMemberMatchingRule | 1 | 0 | 0 | 0 | - | - | FluentAssertions.Equivalency |
| LateBoundTestFramework | 5 | 0 | 3 | 1 | 3 | 1 | FluentAssertions.Execution |
| Tracer | 4 | 0 | 0 | 2 | 0 | 1 | FluentAssertions.Equivalency .Tracing |
| FailReason | 3 | 0 | 2 | 2 | 0 | 1 | FluentAssertions.Execution |
| FormattingOptions | 8 | 0 | 3 | 3 | 0 | 1 | FluentAssertions.Formatting |
| CyclicReferenceHandling | - | - | - | - | - | - | FluentAssertions.Equivalency |
| IClock | 3 | 0 | 0 | 0 | - | - | FluentAssertions.Common |
| ObjectAssertions<TSubject ,TAssertions> | 14 | 0 | 1 | 0 | 3 | 2 | FluentAssertions.Primitives |
| MemberInfoAssertions<TSubject ,TAssertions> | 7 | 0 | 2 | 0 | 4 | 2 | FluentAssertions.Types |
| TypeSelector | 32 | 0 | 0 | 1 | 0 | 1 | FluentAssertions.Types |
| Formatter | 0 | 7 | 1 | 3 | 0 | 1 | FluentAssertions.Formatting |
| BooleanAssertions<TAssertions> | 8 | 0 | 1 | 1 | 3 | 1 | FluentAssertions.Primitives |
| StringAssertions<TAssertions> | 51 | 2 | 1 | 0 | 1 | 2 | FluentAssertions.Primitives |
| IntegerExtensions | 0 | 2 | 0 | 0 | 0 | 1 | FluentAssertions.Common |
| OrderingRuleCollection | 7 | 0 | 0 | 1 | 0 | 1 | FluentAssertions.Equivalency |
| EnumAssertions<TEnum,TAssertions> | 21 | 2 | 1 | 1 | 3 | 1 | FluentAssertions.Primitives |
| EqualityStrategy | - | - | - | - | - | - | FluentAssertions.Equivalency |
| DateTimeOffsetAssertions <TAssertions> | 46 | 0 | 1 | 1 | 3 | 1 | FluentAssertions.Primitives |
| DateTimeAssertions<TAssertions> | 41 | 0 | 1 | 1 | 3 | 1 | FluentAssertions.Primitives |
| IStringComparisonStrategy | 2 | 0 | 1 | 0 | - | - | FluentAssertions.Primitives |
| Disposable | 2 | 0 | 0 | 1 | 0 | 1 | FluentAssertions |
| IConfigurationStore | 1 | 0 | 0 | 0 | - | - | FluentAssertions.Common |
| MemberPath | 16 | 1 | 2 | 5 | 0 | 1 | FluentAssertions.Common |
| IMemberInfo | 7 | 0 | 6 | 0 | - | - | FluentAssertions.Equivalency |
| GuidAssertions<TAssertions> | 9 | 0 | 1 | 1 | 3 | 1 | FluentAssertions.Primitives |
| SimpleTimeSpanAssertions <TAssertions> | 13 | 0 | 1 | 1 | 3 | 1 | FluentAssertions.Primitives |
| StreamAssertions<TSubject ,TAssertions> | 16 | 0 | 1 | 0 | 3 | 2 | FluentAssertions.Streams |
| ConversionSelector | 8 | 0 | 0 | 2 | 0 | 1 | FluentAssertions.Equivalency |
| EquivalencyOptions<TExpectation> | 12 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Equivalency |
| EnumEquivalencyHandling | - | - | - | - | - | - | FluentAssertions.Equivalency |
| IExtractExceptions | 1 | 0 | 0 | 0 | - | - | FluentAssertions.Specialized |
| AssertionOptions | 0 | 5 | 2 | 3 | 0 | 1 | FluentAssertions |
| IEventRecording | 3 | 0 | 3 | 0 | - | - | FluentAssertions.Events |
| OccurredEvent | 9 | 0 | 4 | 4 | 0 | 1 | FluentAssertions.Events |
| MethodInfoExtensions | 0 | 5 | 0 | 1 | 0 | 1 | FluentAssertions.Common |
| IAssertionStrategy | 4 | 0 | 1 | 0 | - | - | FluentAssertions.Execution |
| CallerIdentifier | 0 | 19 | 1 | 2 | 0 | 1 | FluentAssertions |
| Node | 22 | 5 | 11 | 8 | 2 | 1 | FluentAssertions.Equivalency |
| ObjectAssertions | 4 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Primitives |
| GetTraceMessage | 4 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Equivalency .Tracing |
| FormattedObjectGraph+PossibleMulti lineFragment | 18 | 2 | 2 | 3 | 0 | 1 | FluentAssertions.Formatting |
| TypeAssertions | 63 | 2 | 1 | 0 | 0 | 2 | FluentAssertions.Types |
| StringCollectionAssertions <TCollection,TAssertions> | 13 | 0 | 0 | 0 | 2 | 3 | FluentAssertions.Collections |
| MaxLinesExceededException | 3 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Formatting |
| ICloneable2 | 1 | 0 | 0 | 0 | - | - | FluentAssertions.Execution |
| SubsequentOrderingGenericCollectio nAssertions<TCollection,T ,TAssertions> | 7 | 0 | 0 | 2 | 2 | 3 | FluentAssertions.Collections |
| GenericDictionaryAssertions <TCollection,TKey,TValue ,TAssertions> | 27 | 8 | 1 | 0 | 1 | 3 | FluentAssertions.Collections |
| Field | 10 | 0 | 6 | 4 | 0 | 2 | FluentAssertions.Equivalency |
| Property | 9 | 0 | 6 | 4 | 0 | 2 | FluentAssertions.Equivalency |
| TypeExtensions | 0 | 7 | 0 | 0 | 0 | 1 | FluentAssertions |
| XmlNodeAssertions<TSubject ,TAssertions> | 4 | 0 | 1 | 0 | 2 | 2 | FluentAssertions.Xml |
| ExpressionExtensions | 0 | 5 | 0 | 0 | 0 | 1 | FluentAssertions.Common |
| EquivalencyStep<T> | 3 | 0 | 0 | 0 | 4 | 1 | FluentAssertions.Equivalency |
| MemberFactory | 0 | 2 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency |
| ObjectReference | 7 | 0 | 1 | 4 | 0 | 1 | FluentAssertions.Equivalency .Execution |
| Exactly+ExactlyTimesConstraint | 3 | 0 | 1 | 0 | 0 | 2 | FluentAssertions |
| AtLeast+AtLeastTimesConstraint | 3 | 0 | 1 | 0 | 0 | 2 | FluentAssertions |
| AtMost+AtMostTimesConstraint | 3 | 0 | 1 | 0 | 0 | 2 | FluentAssertions |
| CSharpAccessModifierExtensions | 0 | 3 | 0 | 0 | 0 | 1 | FluentAssertions.Common |
| DelegateAssertionsBase<TDelegate ,TAssertions> | 6 | 0 | 2 | 2 | 6 | 2 | FluentAssertions.Specialized |
| ContinuationOfGiven<TSubject> | 2 | 1 | 1 | 2 | 0 | 1 | FluentAssertions.Execution |
| ContextDataItems+DataItem | 6 | 0 | 4 | 4 | 0 | 1 | FluentAssertions.Execution |
| IAssertionContext<TSubject> | 7 | 0 | 5 | 0 | - | - | FluentAssertions.Equivalency |
| LessThan+LessThanTimesConstraint | 3 | 0 | 1 | 0 | 0 | 2 | FluentAssertions |
| MoreThan+MoreThanTimesConstraint | 3 | 0 | 1 | 0 | 0 | 2 | FluentAssertions |
| EquivalencyValidationContext | 16 | 0 | 6 | 6 | 0 | 1 | FluentAssertions.Equivalency |
| TimeSpanCondition | - | - | - | - | - | - | FluentAssertions.Primitives |
| MethodBaseAssertions<TSubject ,TAssertions> | 3 | 1 | 0 | 0 | 2 | 3 | FluentAssertions.Types |
| EventMetadata | 3 | 0 | 2 | 2 | 0 | 1 | FluentAssertions.Events |
| EventAssertions<T> | 7 | 1 | 2 | 2 | 0 | 2 | FluentAssertions.Events |
| ContextDataItems | 6 | 0 | 0 | 1 | 0 | 1 | FluentAssertions.Execution |
| MaximumMatchingSolver<TValue >+Match | 0 | 0 | 0 | 2 | - | - | FluentAssertions.Collections .MaximumMatching |
| ExcludeMemberByPathSelectionRule | 4 | 0 | 0 | 1 | 0 | 2 | FluentAssertions.Equivalency .Selection |
| IReflector | 1 | 0 | 0 | 0 | - | - | FluentAssertions.Common |
| ComparableTypeAssertions<T ,TAssertions> | 16 | 0 | 1 | 1 | 1 | 2 | FluentAssertions.Numeric |
| XmlReaderValidator | 7 | 0 | 0 | 6 | 0 | 1 | FluentAssertions.Xml.Equivalency |
| Configuration | 8 | 1 | 4 | 6 | 0 | 1 | FluentAssertions.Common |
| AttributeData | 6 | 0 | 5 | 4 | 0 | 1 | FluentAssertions.Xml.Equivalency |
| MaximumMatchingProblem<TValue> | 4 | 0 | 2 | 2 | 0 | 1 | FluentAssertions.Collections .MaximumMatching |
| NullableEnumAssertions<TEnum ,TAssertions> | 5 | 0 | 0 | 0 | 1 | 2 | FluentAssertions.Primitives |
| AssertionFailedException | 2 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Execution |
| CollectionMemberObjectInfo | 7 | 1 | 5 | 5 | 0 | 1 | FluentAssertions.Equivalency .Ordering |
| ExceptionAssertions<TException> | 13 | 1 | 4 | 0 | 0 | 2 | FluentAssertions.Specialized |
| NullableDateTimeAssertions <TAssertions> | 5 | 0 | 0 | 0 | 1 | 2 | FluentAssertions.Primitives |
| NullableDateTimeOffsetAssertions <TAssertions> | 5 | 0 | 0 | 0 | 1 | 2 | FluentAssertions.Primitives |
| HttpResponseMessageAssertions <TAssertions> | 11 | 0 | 1 | 0 | 1 | 3 | FluentAssertions.Primitives |
| NullableBooleanAssertions <TAssertions> | 9 | 0 | 0 | 0 | 1 | 2 | FluentAssertions.Primitives |
| NullableSimpleTimeSpanAssertions <TAssertions> | 6 | 0 | 0 | 0 | 1 | 2 | FluentAssertions.Primitives |
| BufferedStreamAssertions <TAssertions> | 4 | 0 | 1 | 0 | 1 | 3 | FluentAssertions.Streams |
| NullableGuidAssertions<TAssertions > | 6 | 0 | 0 | 0 | 1 | 2 | FluentAssertions.Primitives |
| AssertionScope+DeferredReportable | 2 | 0 | 0 | 1 | 0 | 1 | FluentAssertions.Execution |
| CollectingAssertionStrategy | 5 | 0 | 1 | 1 | 0 | 1 | FluentAssertions.Execution |
| DefaultAssertionStrategy | 5 | 0 | 1 | 0 | 0 | 1 | FluentAssertions.Execution |
| MessageBuilder | 7 | 2 | 0 | 2 | 0 | 1 | FluentAssertions.Execution |
| AtMost | 0 | 4 | 0 | 0 | 0 | 1 | FluentAssertions |
| AtLeast | 0 | 4 | 0 | 0 | 0 | 1 | FluentAssertions |
| Exactly | 0 | 4 | 0 | 0 | 0 | 1 | FluentAssertions |
| StartTimer | 4 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Common |
| ExecutionTime | 11 | 0 | 5 | 5 | 1 | 1 | FluentAssertions.Specialized |
| EquivalencyValidator | 4 | 2 | 0 | 1 | 0 | 1 | FluentAssertions.Equivalency |
| MaximumMatchingSolution<TValue> | 5 | 0 | 2 | 2 | 0 | 1 | FluentAssertions.Collections .MaximumMatching |
| StopwatchTimer | 3 | 0 | 1 | 1 | 0 | 1 | FluentAssertions.Common |
| ObjectExtensions | 0 | 5 | 0 | 0 | 0 | 1 | FluentAssertions.Common |
| SelectMemberByPathSelectionRule | 4 | 1 | 1 | 0 | 2 | 1 | FluentAssertions.Equivalency .Selection |
| Clock | 4 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Common |
| StringAssertions | 1 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Primitives |
| CyclicReferenceDetector | 3 | 0 | 0 | 1 | 0 | 1 | FluentAssertions.Equivalency .Execution |
| Iterator<T> | 15 | 0 | 7 | 10 | 0 | 1 | FluentAssertions.Common |
| DateTimeExtensions | 0 | 2 | 0 | 0 | 0 | 1 | FluentAssertions.Common |
| StringCollectionAssertions <TCollection> | 1 | 0 | 0 | 0 | 1 | 4 | FluentAssertions.Collections |
| XmlNodeAssertions | 1 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Xml |
| XmlElementAssertions | 7 | 0 | 1 | 0 | 0 | 3 | FluentAssertions.Xml |
| PredicateLambdaExpressionValueForm atter+ParameterDetector | 5 | 0 | 1 | 1 | 0 | 1 | FluentAssertions.Formatting |
| EquivalencyPlan | 10 | 1 | 0 | 1 | 0 | 1 | FluentAssertions |
| PropertyInfoExtensions | 0 | 3 | 0 | 0 | 0 | 1 | FluentAssertions.Common |
| MethodInfoAssertions | 13 | 1 | 2 | 0 | 0 | 4 | FluentAssertions.Types |
| AddNonEmptySymbolParsingStrategy+M ode | - | - | - | - | - | - | FluentAssertions .CallerIdentification |
| ObjectInfo | 7 | 0 | 5 | 5 | 0 | 1 | FluentAssertions.Equivalency .Execution |
| ValueFormatterDetectionMode | - | - | - | - | - | - | FluentAssertions.Common |
| EnumAssertions<TEnum> | 1 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Primitives |
| NullableEnumAssertions<TEnum> | 1 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Primitives |
| EnumerableExtensions | 0 | 3 | 0 | 0 | 0 | 1 | FluentAssertions.Common |
| DelegateAssertions<TDelegate ,TAssertions> | 8 | 0 | 0 | 0 | 2 | 3 | FluentAssertions.Specialized |
| TimeSpanPredicate | 3 | 0 | 1 | 2 | 0 | 1 | FluentAssertions.Primitives |
| MaximumMatchingSolver<TValue >+MatchCollection | 6 | 0 | 0 | 1 | 0 | 1 | FluentAssertions.Collections .MaximumMatching |
| MemberToMemberInfoAdapter | 8 | 0 | 6 | 5 | 0 | 1 | FluentAssertions.Equivalency .Selection |
| IMonitor<T> | 6 | 0 | 3 | 0 | - | - | FluentAssertions.Events |
| MethodInfoSelector | 23 | 1 | 3 | 1 | 0 | 1 | FluentAssertions.Types |
| PropertyInfoSelector | 19 | 0 | 7 | 1 | 0 | 1 | FluentAssertions.Types |
| AssertionEngineInitializerAttribut e | 2 | 0 | 0 | 2 | 0 | 2 | FluentAssertions.Extensibility |
| NullConfigurationStore | 2 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Common |
| TestFrameworkProvider | 4 | 2 | 0 | 3 | 0 | 1 | FluentAssertions.Execution |
| FullFrameworkReflector | 2 | 3 | 0 | 0 | 0 | 1 | FluentAssertions.Common |
| EquivalencyOptions | 1 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Equivalency |
| SubsequentOrderingAssertions<T> | 1 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Collections |
| SortOrder | - | - | - | - | - | - | FluentAssertions.Collections |
| XDocumentAssertions | 12 | 0 | 1 | 0 | 0 | 2 | FluentAssertions.Xml |
| XElementAssertions | 13 | 0 | 1 | 0 | 0 | 2 | FluentAssertions.Xml |
| XAttributeAssertions | 5 | 0 | 1 | 0 | 0 | 2 | FluentAssertions.Xml |
| PropertyInfoAssertions | 15 | 1 | 2 | 0 | 0 | 3 | FluentAssertions.Types |
| EventRecorder | 12 | 0 | 3 | 8 | 0 | 1 | FluentAssertions.Events |
| EnumerableEquivalencyValidator | 12 | 2 | 2 | 6 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| AssertionResultSet | 5 | 0 | 0 | 1 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| TypeMemberReflector | 4 | 13 | 3 | 4 | 0 | 1 | FluentAssertions.Common |
| AutoConversionStep | 3 | 1 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| FluentTimeSpanExtensions | 0 | 25 | 0 | 2 | 0 | 1 | FluentAssertions.Extensions |
| MaximumMatchingSolver<TValue> | 4 | 0 | 0 | 2 | 0 | 1 | FluentAssertions.Collections .MaximumMatching |
| MemberPathSegmentEqualityComparer | 3 | 2 | 0 | 2 | 0 | 1 | FluentAssertions.Common |
| SelfReferenceEquivalencyOptions <TSelf>+Restriction<TMember>+< >c__3<TMemberType> | 1 | 1 | 0 | 1 | 0 | 1 | FluentAssertions.Equivalency |
| DateTimeOffsetRangeAssertions <TAssertions> | 4 | 1 | 0 | 5 | 0 | 1 | FluentAssertions.Primitives |
| DateTimeRangeAssertions <TAssertions> | 4 | 1 | 0 | 5 | 0 | 1 | FluentAssertions.Primitives |
| ThreadSafeSequenceGenerator | 2 | 0 | 0 | 1 | 0 | 1 | FluentAssertions.Events |
| AsyncFunctionAssertions<TTask ,TAssertions> | 11 | 1 | 1 | 0 | 2 | 3 | FluentAssertions.Specialized |
| PathBasedOrderingRule | 6 | 1 | 1 | 2 | 0 | 1 | FluentAssertions.Equivalency .Ordering |
| MappedPathMatchingRule | 2 | 0 | 0 | 2 | 0 | 1 | FluentAssertions.Equivalency .Matching |
| CollectionMemberOptionsDecorator | 18 | 0 | 16 | 1 | 0 | 1 | FluentAssertions.Equivalency .Execution |
| MappedMemberMatchingRule <TExpectation,TSubject> | 2 | 0 | 0 | 2 | 0 | 1 | FluentAssertions.Equivalency .Matching |
| IncludeMemberByPathSelectionRule | 4 | 0 | 1 | 1 | 0 | 2 | FluentAssertions.Equivalency .Selection |
| NestedExclusionOptionBuilder <TExpectation,TCurrent> | 3 | 0 | 0 | 2 | 0 | 1 | FluentAssertions.Equivalency |
| EnumerableEquivalencyStep | 2 | 3 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| TaskCompletionSourceAssertions<T> | 4 | 0 | 0 | 1 | 0 | 2 | FluentAssertions.Specialized |
| GenericAsyncFunctionAssertions <TResult> | 5 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Specialized |
| EnumerableExtensions | 0 | 1 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| GivenSelectorExtensions+Collection WithIndex<T> | 12 | 0 | 4 | 2 | 0 | 1 | FluentAssertions.Execution |
| FunctionAssertionHelpers | 0 | 2 | 0 | 0 | 0 | 1 | FluentAssertions.Specialized |
| FullFrameworkReflector+<>O | 0 | 0 | 0 | 1 | 0 | 1 | FluentAssertions.Common |
| TaskCompletionSourceAssertionsBase | 4 | 0 | 1 | 1 | 1 | 1 | FluentAssertions.Specialized |
| ConversionSelector+ConversionSelec torRule | 3 | 0 | 2 | 2 | 0 | 1 | FluentAssertions.Equivalency |
| StringBuilderExtensions | 0 | 2 | 0 | 0 | 0 | 1 | System.Text |
| MaximumMatchingSolver<TValue >+BreadthFirstSearchTracker | 4 | 0 | 0 | 3 | 0 | 1 | FluentAssertions.Collections .MaximumMatching |
| MemberInfoAssertions<TSubject ,TAssertions>+<>c__1<TAttribute> | 1 | 1 | 0 | 1 | 0 | 1 | FluentAssertions.Types |
| MemberInfoAssertions<TSubject ,TAssertions>+<>c__2<TAttribute> | 1 | 1 | 0 | 1 | 0 | 1 | FluentAssertions.Types |
| NUnitTestFramework | 3 | 0 | 2 | 0 | 0 | 2 | FluentAssertions.Execution |
| XUnit2TestFramework | 3 | 0 | 1 | 1 | 0 | 1 | FluentAssertions.Execution |
| MSpecFramework | 3 | 0 | 2 | 0 | 0 | 2 | FluentAssertions.Execution |
| FallbackTestFramework | 3 | 0 | 1 | 0 | 0 | 1 | FluentAssertions.Execution |
| MSTestFrameworkV2 | 3 | 0 | 2 | 0 | 0 | 2 | FluentAssertions.Execution |
| Digit | 3 | 0 | 0 | 3 | 0 | 1 | FluentAssertions.Equivalency |
| PredicateLambdaExpressionValueForm atter+ConstantSubExpressionReducti onVisitor | 2 | 2 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| PredicateLambdaExpressionValueForm atter+AndOperatorChainExtractor | 3 | 0 | 1 | 1 | 0 | 1 | FluentAssertions.Formatting |
| Failure | 3 | 0 | 2 | 2 | 0 | 1 | FluentAssertions.Xml.Equivalency |
| XmlIterator | 10 | 0 | 6 | 2 | 0 | 1 | FluentAssertions.Xml.Equivalency |
| Node | 7 | 1 | 1 | 4 | 0 | 1 | FluentAssertions.Xml.Equivalency |
| CollectionMemberSelectionRuleDecor ator | 4 | 0 | 1 | 1 | 0 | 1 | FluentAssertions.Equivalency .Selection |
| CollectionMemberOrderingRuleDecora tor | 3 | 0 | 0 | 1 | 0 | 1 | FluentAssertions.Equivalency .Ordering |
| DoubleAssertions | 3 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Numeric |
| SingleAssertions | 3 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Numeric |
| DecimalAssertions | 2 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Numeric |
| GenericCollectionAssertions<T> | 1 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Collections |
| SingleLineCommentParsingStrategy | 4 | 0 | 0 | 1 | 0 | 1 | FluentAssertions .CallerIdentification |
| AddNonEmptySymbolParsingStrategy | 4 | 0 | 0 | 2 | 0 | 1 | FluentAssertions .CallerIdentification |
| SemicolonParsingStrategy | 4 | 0 | 0 | 0 | 0 | 1 | FluentAssertions .CallerIdentification |
| MultiLineCommentParsingStrategy | 4 | 0 | 0 | 2 | 0 | 1 | FluentAssertions .CallerIdentification |
| AwaitParsingStrategy | 4 | 2 | 0 | 1 | 0 | 1 | FluentAssertions .CallerIdentification |
| ShouldCallParsingStrategy | 4 | 0 | 0 | 1 | 0 | 1 | FluentAssertions .CallerIdentification |
| QuotesParsingStrategy | 5 | 0 | 0 | 3 | 0 | 1 | FluentAssertions .CallerIdentification |
| StringWildcardMatchingStrategy | 11 | 1 | 4 | 3 | 0 | 1 | FluentAssertions.Primitives |
| StringEqualityStrategy | 7 | 4 | 2 | 1 | 0 | 1 | FluentAssertions.Primitives |
| NegatedStringStartStrategy | 4 | 0 | 2 | 1 | 0 | 1 | FluentAssertions.Primitives |
| StringStartStrategy | 4 | 0 | 2 | 1 | 0 | 1 | FluentAssertions.Primitives |
| StringValidator | 3 | 0 | 0 | 2 | 0 | 1 | FluentAssertions.Primitives |
| StringSyntaxAttribute | 4 | 0 | 2 | 14 | 0 | 2 | System.Diagnostics.CodeAnalysis |
| StringAssertions<TAssertions>+<>O | 0 | 0 | 0 | 2 | 0 | 1 | FluentAssertions.Primitives |
| AssertionRuleEquivalencyStep <TSubject> | 5 | 1 | 0 | 4 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| ExceptionAssertions<TException >+ExceptionMessageAssertion | 0 | 1 | 0 | 1 | 0 | 1 | FluentAssertions.Specialized |
| AssertionContext<TSubject> | 8 | 1 | 5 | 5 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| RecordedEvent | 4 | 0 | 3 | 3 | 0 | 1 | FluentAssertions.Events |
| EventHandlerFactory | 0 | 6 | 0 | 0 | 0 | 1 | FluentAssertions.Events |
| <>f__AnonymousType0<<rule>j__TPar, <match>j__TPar> | 6 | 0 | 2 | 2 | 0 | 1 | |
| ValueTypeEquivalencyStep | 2 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| StructuralEqualityEquivalencyStep | 2 | 3 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| StringEqualityEquivalencyStep | 2 | 2 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| XDocumentEquivalencyStep | 2 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Equivalency.Steps |
| MultiDimensionalArrayEquivalencySt ep | 2 | 5 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency |
| XElementEquivalencyStep | 2 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Equivalency.Steps |
| GenericDictionaryEquivalencyStep | 2 | 8 | 0 | 1 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| EnumEqualityStep | 2 | 4 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| DictionaryEquivalencyStep | 2 | 4 | 0 | 0 | 0 | 2 | FluentAssertions.Equivalency.Steps |
| GenericEnumerableEquivalencyStep | 2 | 8 | 0 | 1 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| SimpleEqualityEquivalencyStep | 2 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| RunAllUserStepsEquivalencyStep | 2 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| ReferenceEqualityEquivalencyStep | 2 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| XAttributeEquivalencyStep | 2 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Equivalency.Steps |
| <>f__AnonymousType5<<Type>j__TPar, <Method>j__TPar> | 6 | 0 | 2 | 2 | 0 | 1 | |
| <>f__AnonymousType3<<type>j__TPar, <method>j__TPar> | 6 | 0 | 2 | 2 | 0 | 1 | |
| <>f__AnonymousType4<<< >h__TransparentIdentifier0>j__TPar ,<methodParameters>j__TPar> | 6 | 0 | 2 | 2 | 0 | 1 | |
| AttributeBasedFormatter+<>O | 0 | 0 | 0 | 1 | 0 | 1 | FluentAssertions.Formatting |
| CallerIdentifier+StackFrameReferen ce | 3 | 0 | 1 | 2 | 0 | 1 | FluentAssertions |
| CallerStatementBuilder | 4 | 0 | 0 | 3 | 0 | 1 | FluentAssertions .CallerIdentification |
| CustomAssertionsAssemblyAttribute | 1 | 0 | 0 | 0 | 0 | 2 | FluentAssertions |
| CustomAssertionAttribute | 1 | 0 | 0 | 0 | 0 | 2 | FluentAssertions |
| FilteredEventRecording | 6 | 0 | 3 | 4 | 0 | 1 | FluentAssertions.Events |
| <>f__AnonymousType2<<< >h__TransparentIdentifier0>j__TPar ,<event>j__TPar> | 6 | 0 | 2 | 2 | 0 | 1 | |
| <>f__AnonymousType1<<eventName >j__TPar,<recording>j__TPar> | 6 | 0 | 2 | 2 | 0 | 1 | |
| MethodInfoSelectorAssertions+< >c__12<TAttribute> | 1 | 1 | 0 | 1 | 0 | 1 | FluentAssertions.Types |
| MethodInfoSelectorAssertions+< >c__10<TAttribute> | 1 | 1 | 0 | 1 | 0 | 1 | FluentAssertions.Types |
| ExceptionExtensions | 0 | 1 | 0 | 0 | 0 | 1 | FluentAssertions.Common |
| EnumerableEquivalencyValidatorExte nsions | 0 | 3 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| EquivalencyValidationContextExtens ions | 0 | 1 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| SByteValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| ByteValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| XmlNodeFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Xml |
| AggregateExceptionValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| AttributeBasedFormatter | 6 | 3 | 2 | 2 | 0 | 1 | FluentAssertions.Formatting |
| DateTimeOffsetValueFormatter | 3 | 5 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| Int32ValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| Int16ValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| MultidimensionalArrayFormatter | 3 | 3 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| Int64ValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| GuidValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| UInt64ValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| ExceptionValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| Formatter+ObjectGraph | 6 | 0 | 1 | 2 | 0 | 1 | FluentAssertions.Formatting |
| ExpressionValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| TimeSpanValueFormatter | 3 | 7 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| TaskFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| UInt16ValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| UInt32ValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| StringValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| PredicateLambdaExpressionValueForm atter | 3 | 2 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| NullValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| SingleValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| PropertyInfoFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| EnumValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| DictionaryValueFormatter | 4 | 2 | 1 | 0 | 0 | 1 | FluentAssertions.Formatting |
| DefaultValueFormatter | 8 | 4 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| DecimalValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| XmlReaderValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| XElementValueFormatter | 3 | 3 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| XAttributeValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| XDocumentValueFormatter | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| DoubleValueFormatter | 3 | 1 | 0 | 0 | 0 | 1 | FluentAssertions.Formatting |
| EnumerableValueFormatter | 4 | 0 | 1 | 0 | 0 | 1 | FluentAssertions.Formatting |
| WhoseValueConstraint<TCollection ,TKey,TValue,TAssertions> | 2 | 0 | 1 | 1 | 0 | 2 | FluentAssertions.Collections |
| DictionaryHelpers | 0 | 5 | 0 | 0 | 0 | 1 | FluentAssertions.Common |
| ExcludeNonBrowsableMembersRule | 3 | 0 | 1 | 0 | 0 | 1 | FluentAssertions.Equivalency .Selection |
| IncludeMemberByPredicateSelectionR ule | 4 | 0 | 1 | 2 | 0 | 1 | FluentAssertions.Equivalency .Selection |
| ExcludeMemberByPredicateSelectionR ule | 4 | 0 | 1 | 2 | 0 | 1 | FluentAssertions.Equivalency .Selection |
| MustMatchByNameRule | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency .Matching |
| TryMatchByNameRule | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency .Matching |
| EqualityStrategyProvider | 8 | 0 | 1 | 5 | 0 | 1 | FluentAssertions.Equivalency |
| ByteArrayOrderingRule | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency .Ordering |
| MatchAllOrderingRule | 3 | 0 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency .Ordering |
| PredicateBasedOrderingRule | 5 | 0 | 1 | 3 | 0 | 1 | FluentAssertions.Equivalency .Ordering |
| AllPropertiesSelectionRule | 4 | 0 | 1 | 0 | 0 | 1 | FluentAssertions.Equivalency .Selection |
| StringBuilderTraceWriter | 5 | 0 | 0 | 2 | 0 | 1 | FluentAssertions.Equivalency .Tracing |
| SelfReferenceEquivalencyOptions <TSelf>+Restriction<TMember> | 3 | 0 | 0 | 2 | 0 | 1 | FluentAssertions.Equivalency |
| AllFieldsSelectionRule | 4 | 0 | 1 | 0 | 0 | 1 | FluentAssertions.Equivalency .Selection |
| EqualityComparerEquivalencyStep<T> | 3 | 0 | 0 | 1 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| DictionaryInterfaceInfo | 5 | 5 | 2 | 4 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| GenericDictionaryEquivalencyStep+K eyDifference<TSubjectKey ,TExpectedKey> | 3 | 0 | 2 | 2 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| GenericCollectionAssertions <TCollection,T,TAssertions>+<>c__6 <TExpectation> | 1 | 1 | 0 | 1 | 0 | 1 | FluentAssertions.Collections |
| GivenSelectorExtensions | 0 | 7 | 0 | 0 | 0 | 1 | FluentAssertions.Execution |
| BooleanAssertions | 1 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Primitives |
| ExecutionTimeAssertions | 8 | 0 | 0 | 1 | 0 | 1 | FluentAssertions.Specialized |
| AssemblyAssertions | 7 | 1 | 1 | 0 | 0 | 2 | FluentAssertions.Types |
| ActionAssertions | 6 | 0 | 1 | 0 | 0 | 4 | FluentAssertions.Specialized |
| GenericDictionaryAssertions <TCollection,TKey,TValue> | 1 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Collections |
| NonGenericAsyncFunctionAssertions | 5 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Specialized |
| FunctionAssertions<T> | 6 | 0 | 1 | 0 | 0 | 4 | FluentAssertions.Specialized |
| MemberExecutionTime<T> | 1 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Specialized |
| StringCollectionAssertions | 1 | 0 | 0 | 0 | 0 | 5 | FluentAssertions.Collections |
| EventMonitor<T> | 10 | 1 | 3 | 3 | 0 | 1 | FluentAssertions.Events |
| MethodInfoSelectorAssertions | 18 | 1 | 2 | 1 | 0 | 1 | FluentAssertions.Types |
| ConstructorInfoAssertions | 3 | 1 | 2 | 0 | 0 | 4 | FluentAssertions.Types |
| NullableByteAssertions | 2 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Numeric |
| PropertyInfoSelectorAssertions | 16 | 1 | 2 | 1 | 0 | 1 | FluentAssertions.Types |
| BufferedStreamAssertions | 1 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Streams |
| StreamAssertions | 1 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Streams |
| AggregateExceptionExtractor | 2 | 1 | 0 | 0 | 0 | 1 | FluentAssertions |
| TypeSelectorAssertions | 17 | 2 | 1 | 1 | 0 | 1 | FluentAssertions.Types |
| UInt32Assertions | 2 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Numeric |
| UInt16Assertions | 2 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Numeric |
| SByteAssertions | 2 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Numeric |
| NullableInt16Assertions | 2 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Numeric |
| Int64Assertions | 2 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Numeric |
| NullableDecimalAssertions | 2 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Numeric |
| NullableDoubleAssertions | 3 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Numeric |
| NullableUInt16Assertions | 2 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Numeric |
| NullableUInt32Assertions | 2 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Numeric |
| NullableUInt64Assertions | 2 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Numeric |
| NullableSingleAssertions | 3 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Numeric |
| NullableInt32Assertions | 2 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Numeric |
| NullableInt64Assertions | 2 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Numeric |
| NullableSByteAssertions | 2 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Numeric |
| Int32Assertions | 2 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Numeric |
| NullableDateTimeOffsetAssertions | 1 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Primitives |
| DateTimeAssertions | 1 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Primitives |
| NullableBooleanAssertions | 1 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Primitives |
| DateTimeOffsetAssertions | 1 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Primitives |
| NullableDateTimeAssertions | 1 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Primitives |
| HttpResponseMessageAssertions | 1 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Primitives |
| GuidAssertions | 1 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Primitives |
| UInt64Assertions | 2 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Numeric |
| Int16Assertions | 2 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Numeric |
| ComparableTypeAssertions<T> | 1 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Numeric |
| ByteAssertions | 2 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Numeric |
| SimpleTimeSpanAssertions | 1 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Primitives |
| NullableGuidAssertions | 1 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Primitives |
| NullableSimpleTimeSpanAssertions | 1 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Primitives |
| SkipLocalsInitAttribute | 1 | 0 | 0 | 0 | 0 | 2 | System.Runtime.CompilerServices |
| RequiredMemberAttribute | 1 | 0 | 0 | 0 | 0 | 2 | System.Runtime.CompilerServices |
| ModuleInitializerAttribute | 1 | 0 | 0 | 0 | 0 | 2 | System.Runtime.CompilerServices |
| MemberNotNullAttribute | 3 | 0 | 1 | 1 | 0 | 2 | System.Diagnostics.CodeAnalysis |
| IsExternalInit | 0 | 0 | 0 | 0 | 0 | 1 | System.Runtime.CompilerServices |
| FluentDateTimeExtensions | 0 | 28 | 0 | 0 | 0 | 1 | FluentAssertions.Extensions |
| SubjectInfoExtensions | 0 | 4 | 0 | 0 | 0 | 1 | FluentAssertions.Equivalency |
| BooleanAssertionsExtensions | 0 | 1 | 0 | 0 | 0 | 1 | FluentAssertions.Primitives |
| OccurrenceConstraintExtensions | 0 | 3 | 0 | 0 | 0 | 1 | FluentAssertions.Extensions |
| RefSafetyRulesAttribute | 1 | 0 | 0 | 1 | 0 | 2 | System.Runtime.CompilerServices |
| InterpolatedStringHandlerArgumentA ttribute | 3 | 0 | 1 | 1 | 0 | 2 | System.Runtime.CompilerServices |
| InterpolatedStringHandlerAttribute | 1 | 0 | 0 | 0 | 0 | 2 | System.Runtime.CompilerServices |
| RequiresPreviewFeaturesAttribute | 5 | 0 | 2 | 2 | 0 | 2 | System.Runtime.Versioning |
| CompilerFeatureRequiredAttribute | 4 | 0 | 2 | 4 | 0 | 2 | System.Runtime.CompilerServices |
| MemberNotNullWhenAttribute | 4 | 0 | 2 | 2 | 0 | 2 | System.Diagnostics.CodeAnalysis |
| MoreThan | 0 | 4 | 0 | 0 | 0 | 1 | FluentAssertions |
| NumericAssertionsExtensions | 0 | 40 | 0 | 0 | 0 | 1 | FluentAssertions |
| FluentActions | 0 | 6 | 0 | 0 | 0 | 1 | FluentAssertions |
| LessThan | 0 | 3 | 0 | 0 | 0 | 1 | FluentAssertions |
| XmlAssertionExtensions | 0 | 2 | 0 | 0 | 0 | 1 | FluentAssertions |
| AllTypes | 0 | 1 | 0 | 0 | 0 | 1 | FluentAssertions.Types |
| ObjectAssertionsExtensions | 0 | 5 | 0 | 0 | 0 | 1 | FluentAssertions |
| TypeEnumerableExtensions | 0 | 15 | 0 | 0 | 0 | 1 | FluentAssertions |
| ExceptionAssertionsExtensions | 0 | 8 | 0 | 0 | 0 | 1 | FluentAssertions |
| UnscopedRefAttribute | 1 | 0 | 0 | 0 | 0 | 2 | System.Diagnostics.CodeAnalysis |
| AsyncAssertionsExtensions | 0 | 2 | 0 | 0 | 0 | 1 | FluentAssertions |
| SetsRequiredMembersAttribute | 1 | 0 | 0 | 0 | 0 | 2 | System.Diagnostics.CodeAnalysis |
| SubsequentOrderingGenericCollectio nAssertions<TCollection,T> | 1 | 0 | 0 | 0 | 0 | 4 | FluentAssertions.Collections |
| GenericCollectionAssertions <TCollection,T> | 1 | 0 | 0 | 0 | 0 | 3 | FluentAssertions.Collections |
| EventRaisingExtensions | 0 | 3 | 0 | 0 | 0 | 1 | FluentAssertions |
| ValueFormatterAttribute | 1 | 0 | 0 | 0 | 0 | 2 | FluentAssertions.Formatting |
| EnumAssertionsExtensions | 0 | 2 | 0 | 0 | 0 | 1 | FluentAssertions |
Types Metrics : Lack Of Cohesion Of Methods and Association Between Classes
| Type Name | Lack Of Cohesion Of Methods | Lack Of Cohesion Of Methods HS | Association Between Classes | Type Namespace |
|---|---|---|---|---|
| AssertionScope | 0.89 | 0.92 | 63 | FluentAssertions.Execution |
| Continuation | 0.25 | 0.5 | 2 | FluentAssertions.Execution |
| INode | - | - | 0 | FluentAssertions.Equivalency |
| FormattedObjectGraph | 0.75 | 0.82 | 24 | FluentAssertions.Formatting |
| AndConstraint<T> | 0 | 0 | 1 | FluentAssertions |
| ReferenceTypeAssertions<TSubject ,TAssertions> | 0 | 0 | 26 | FluentAssertions.Primitives |
| Execute | 0 | 0 | 2 | FluentAssertions.Execution |
| FormattingContext | 0 | 0 | 1 | FluentAssertions.Formatting |
| FormatChild | - | - | 0 | FluentAssertions.Formatting |
| IEquivalencyOptions | - | - | 0 | FluentAssertions.Equivalency |
| Comparands | 0 | 0 | 8 | FluentAssertions.Equivalency |
| IValueFormatter | - | - | 0 | FluentAssertions.Formatting |
| OccurrenceConstraint | 0 | 0 | 5 | FluentAssertions |
| IEquivalencyValidationContext | - | - | 0 | FluentAssertions.Equivalency |
| IAssertionScope | - | - | 0 | FluentAssertions.Execution |
| NumericAssertions<T,TAssertions> | 0 | 0 | 33 | FluentAssertions.Numeric |
| IMember | - | - | 0 | FluentAssertions.Equivalency |
| Guard | 0 | 0 | 17 | FluentAssertions.Common |
| TypeExtensions | 0 | 0 | 76 | FluentAssertions.Common |
| CallerArgumentExpressionAttribute | 0 | 0 | 1 | System.Runtime.CompilerServices |
| Guard+ValidatedNotNullAttribute | 0 | 0 | 1 | FluentAssertions.Common |
| IObjectInfo | - | - | 0 | FluentAssertions.Equivalency |
| CSharpAccessModifier | - | - | 0 | FluentAssertions.Common |
| IEquivalencyValidator | - | - | 0 | FluentAssertions.Equivalency |
| EquivalencyResult | - | - | 0 | FluentAssertions.Equivalency |
| Reason | 0 | 0 | 1 | FluentAssertions.Execution |
| Services | 0 | 0 | 28 | FluentAssertions.Common |
| NullableAttribute | 0 | 0 | 1 | System.Runtime.CompilerServices |
| IEquivalencyStep | - | - | 0 | FluentAssertions.Equivalency |
| OrderStrictness | - | - | 0 | FluentAssertions.Equivalency |
| GenericCollectionAssertions <TCollection,T,TAssertions> | 0 | 0 | 167 | FluentAssertions.Collections |
| StringExtensions | 0 | 0 | 25 | FluentAssertions.Common |
| ParsingState | - | - | 0 | FluentAssertions .CallerIdentification |
| GetSubjectId | - | - | 0 | FluentAssertions.Equivalency |
| MemberVisibility | - | - | 0 | FluentAssertions.Equivalency |
| AssertionExtensions | 0 | 0 | 85 | FluentAssertions |
| NullableNumericAssertions<T ,TAssertions> | 0 | 0 | 12 | FluentAssertions.Numeric |
| NumericAssertions<T> | 0 | 0 | 1 | FluentAssertions.Numeric |
| IMemberSelectionRule | - | - | 0 | FluentAssertions.Equivalency |
| MemberSelectionContext | 0 | 0 | 6 | FluentAssertions.Equivalency |
| ITestFramework | - | - | 0 | FluentAssertions.Execution |
| ITimer | - | - | 0 | FluentAssertions.Common |
| NullableContextAttribute | 0 | 0 | 1 | System.Runtime.CompilerServices |
| NullableNumericAssertions<T> | 0 | 0 | 1 | FluentAssertions.Numeric |
| IParsingStrategy | - | - | 0 | FluentAssertions .CallerIdentification |
| ContinuedAssertionScope | 0.07 | 0.08 | 18 | FluentAssertions.Execution |
| GivenSelector<T> | 0.29 | 0.33 | 14 | FluentAssertions.Execution |
| EmbeddedAttribute | 0 | 0 | 1 | Microsoft.CodeAnalysis |
| IOrderingRule | - | - | 0 | FluentAssertions.Equivalency |
| ITraceWriter | - | - | 0 | FluentAssertions.Equivalency .Tracing |
| SelfReferenceEquivalencyOptions <TSelf> | 0.87 | 0.89 | 89 | FluentAssertions.Equivalency |
| AndWhichConstraint <TParentConstraint,TMatchedElement > | 0.33 | 0.5 | 16 | FluentAssertions |
| Predicate<TValue> | 0.33 | 0.5 | 5 | FluentAssertions.Collections .MaximumMatching |
| Element<TValue> | 0 | 0 | 1 | FluentAssertions.Collections .MaximumMatching |
| IMemberMatchingRule | - | - | 0 | FluentAssertions.Equivalency |
| LateBoundTestFramework | 0.5 | 1 | 12 | FluentAssertions.Execution |
| Tracer | 0.12 | 0.17 | 8 | FluentAssertions.Equivalency .Tracing |
| FailReason | 0 | 0 | 1 | FluentAssertions.Execution |
| FormattingOptions | 0 | 0 | 1 | FluentAssertions.Formatting |
| CyclicReferenceHandling | - | - | 0 | FluentAssertions.Equivalency |
| IClock | - | - | 0 | FluentAssertions.Common |
| ObjectAssertions<TSubject ,TAssertions> | 0 | 0 | 41 | FluentAssertions.Primitives |
| MemberInfoAssertions<TSubject ,TAssertions> | 0 | 0 | 23 | FluentAssertions.Types |
| TypeSelector | 0.06 | 0.06 | 40 | FluentAssertions.Types |
| Formatter | 0 | 0 | 66 | FluentAssertions.Formatting |
| BooleanAssertions<TAssertions> | 0 | 0 | 16 | FluentAssertions.Primitives |
| StringAssertions<TAssertions> | 0 | 0 | 54 | FluentAssertions.Primitives |
| IntegerExtensions | 0 | 0 | 1 | FluentAssertions.Common |
| OrderingRuleCollection | 0.14 | 0.17 | 11 | FluentAssertions.Equivalency |
| EnumAssertions<TEnum,TAssertions> | 0 | 0 | 37 | FluentAssertions.Primitives |
| EqualityStrategy | - | - | 0 | FluentAssertions.Equivalency |
| DateTimeOffsetAssertions <TAssertions> | 0 | 0 | 51 | FluentAssertions.Primitives |
| DateTimeAssertions<TAssertions> | 0 | 0 | 48 | FluentAssertions.Primitives |
| IStringComparisonStrategy | - | - | 0 | FluentAssertions.Primitives |
| Disposable | 0 | 0 | 2 | FluentAssertions |
| IConfigurationStore | - | - | 0 | FluentAssertions.Common |
| MemberPath | 0.77 | 0.82 | 18 | FluentAssertions.Common |
| IMemberInfo | - | - | 0 | FluentAssertions.Equivalency |
| GuidAssertions<TAssertions> | 0 | 0 | 16 | FluentAssertions.Primitives |
| SimpleTimeSpanAssertions <TAssertions> | 0 | 0 | 20 | FluentAssertions.Primitives |
| StreamAssertions<TSubject ,TAssertions> | 0 | 0 | 17 | FluentAssertions.Streams |
| ConversionSelector | 0.31 | 0.36 | 24 | FluentAssertions.Equivalency |
| EquivalencyOptions<TExpectation> | 0 | 0 | 17 | FluentAssertions.Equivalency |
| EnumEquivalencyHandling | - | - | 0 | FluentAssertions.Equivalency |
| IExtractExceptions | - | - | 0 | FluentAssertions.Specialized |
| AssertionOptions | 0 | 0 | 7 | FluentAssertions |
| IEventRecording | - | - | 0 | FluentAssertions.Events |
| OccurredEvent | 0 | 0 | 1 | FluentAssertions.Events |
| MethodInfoExtensions | 0 | 0 | 22 | FluentAssertions.Common |
| IAssertionStrategy | - | - | 0 | FluentAssertions.Execution |
| CallerIdentifier | 0 | 0 | 49 | FluentAssertions |
| Node | 1 | 1.11 | 23 | FluentAssertions.Equivalency |
| ObjectAssertions | 0 | 0 | 12 | FluentAssertions.Primitives |
| GetTraceMessage | - | - | 0 | FluentAssertions.Equivalency .Tracing |
| FormattedObjectGraph+PossibleMulti lineFragment | 0.37 | 0.42 | 32 | FluentAssertions.Formatting |
| TypeAssertions | 0 | 0 | 73 | FluentAssertions.Types |
| StringCollectionAssertions <TCollection,TAssertions> | 0 | 0 | 56 | FluentAssertions.Collections |
| MaxLinesExceededException | 0 | 0 | 3 | FluentAssertions.Formatting |
| ICloneable2 | - | - | 0 | FluentAssertions.Execution |
| SubsequentOrderingGenericCollectio nAssertions<TCollection,T ,TAssertions> | 0.71 | 0.83 | 9 | FluentAssertions.Collections |
| GenericDictionaryAssertions <TCollection,TKey,TValue ,TAssertions> | 0 | 0 | 65 | FluentAssertions.Collections |
| Field | 0.67 | 1 | 27 | FluentAssertions.Equivalency |
| Property | 0.67 | 1 | 30 | FluentAssertions.Equivalency |
| TypeExtensions | 0 | 0 | 9 | FluentAssertions |
| XmlNodeAssertions<TSubject ,TAssertions> | 0 | 0 | 7 | FluentAssertions.Xml |
| ExpressionExtensions | 0 | 0 | 31 | FluentAssertions.Common |
| EquivalencyStep<T> | 0 | 0 | 6 | FluentAssertions.Equivalency |
| MemberFactory | 0 | 0 | 10 | FluentAssertions.Equivalency |
| ObjectReference | 0.62 | 0.75 | 15 | FluentAssertions.Equivalency .Execution |
| Exactly+ExactlyTimesConstraint | 0 | 0 | 2 | FluentAssertions |
| AtLeast+AtLeastTimesConstraint | 0 | 0 | 2 | FluentAssertions |
| AtMost+AtMostTimesConstraint | 0 | 0 | 2 | FluentAssertions |
| CSharpAccessModifierExtensions | 0 | 0 | 20 | FluentAssertions.Common |
| DelegateAssertionsBase<TDelegate ,TAssertions> | 0 | 0 | 21 | FluentAssertions.Specialized |
| ContinuationOfGiven<TSubject> | 0 | 0 | 1 | FluentAssertions.Execution |
| ContextDataItems+DataItem | 0 | 0 | 2 | FluentAssertions.Execution |
| IAssertionContext<TSubject> | - | - | 0 | FluentAssertions.Equivalency |
| LessThan+LessThanTimesConstraint | 0 | 0 | 2 | FluentAssertions |
| MoreThan+MoreThanTimesConstraint | 0 | 0 | 2 | FluentAssertions |
| EquivalencyValidationContext | 1 | 1.17 | 17 | FluentAssertions.Equivalency |
| TimeSpanCondition | - | - | 0 | FluentAssertions.Primitives |
| MethodBaseAssertions<TSubject ,TAssertions> | 0 | 0 | 21 | FluentAssertions.Types |
| EventMetadata | 0 | 0 | 1 | FluentAssertions.Events |
| EventAssertions<T> | 0 | 0 | 24 | FluentAssertions.Events |
| ContextDataItems | 0 | 0 | 22 | FluentAssertions.Execution |
| MaximumMatchingSolver<TValue >+Match | 0 | 0 | 0 | FluentAssertions.Collections .MaximumMatching |
| ExcludeMemberByPathSelectionRule | 0 | 0 | 9 | FluentAssertions.Equivalency .Selection |
| IReflector | - | - | 0 | FluentAssertions.Common |
| ComparableTypeAssertions<T ,TAssertions> | 0 | 0 | 33 | FluentAssertions.Numeric |
| XmlReaderValidator | 0.5 | 0.58 | 42 | FluentAssertions.Xml.Equivalency |
| Configuration | 0.25 | 0.5 | 14 | FluentAssertions.Common |
| AttributeData | 0 | 0 | 3 | FluentAssertions.Xml.Equivalency |
| MaximumMatchingProblem<TValue> | 0 | 0 | 9 | FluentAssertions.Collections .MaximumMatching |
| NullableEnumAssertions<TEnum ,TAssertions> | 0 | 0 | 10 | FluentAssertions.Primitives |
| AssertionFailedException | 0 | 0 | 2 | FluentAssertions.Execution |
| CollectionMemberObjectInfo | 0 | 0 | 8 | FluentAssertions.Equivalency .Ordering |
| ExceptionAssertions<TException> | 0 | 0 | 35 | FluentAssertions.Specialized |
| NullableDateTimeAssertions <TAssertions> | 0 | 0 | 8 | FluentAssertions.Primitives |
| NullableDateTimeOffsetAssertions <TAssertions> | 0 | 0 | 8 | FluentAssertions.Primitives |
| HttpResponseMessageAssertions <TAssertions> | 0 | 0 | 12 | FluentAssertions.Primitives |
| NullableBooleanAssertions <TAssertions> | 0 | 0 | 10 | FluentAssertions.Primitives |
| NullableSimpleTimeSpanAssertions <TAssertions> | 0 | 0 | 11 | FluentAssertions.Primitives |
| BufferedStreamAssertions <TAssertions> | 0 | 0 | 9 | FluentAssertions.Streams |
| NullableGuidAssertions<TAssertions > | 0 | 0 | 11 | FluentAssertions.Primitives |
| AssertionScope+DeferredReportable | 0 | 0 | 3 | FluentAssertions.Execution |
| CollectingAssertionStrategy | 0 | 0 | 22 | FluentAssertions.Execution |
| DefaultAssertionStrategy | 0 | 0 | 4 | FluentAssertions.Execution |
| MessageBuilder | 0.72 | 0.81 | 31 | FluentAssertions.Execution |
| AtMost | 0 | 0 | 1 | FluentAssertions |
| AtLeast | 0 | 0 | 1 | FluentAssertions |
| Exactly | 0 | 0 | 1 | FluentAssertions |
| StartTimer | - | - | 0 | FluentAssertions.Common |
| ExecutionTime | 0.5 | 0.67 | 21 | FluentAssertions.Specialized |
| EquivalencyValidator | 0 | 0 | 44 | FluentAssertions.Equivalency |
| MaximumMatchingSolution<TValue> | 0 | 0 | 9 | FluentAssertions.Collections .MaximumMatching |
| StopwatchTimer | 0 | 0 | 5 | FluentAssertions.Common |
| ObjectExtensions | 0 | 0 | 11 | FluentAssertions.Common |
| SelectMemberByPathSelectionRule | 0 | 0 | 8 | FluentAssertions.Equivalency .Selection |
| Clock | 0 | 0 | 6 | FluentAssertions.Common |
| StringAssertions | 0 | 0 | 1 | FluentAssertions.Primitives |
| CyclicReferenceDetector | 0 | 0 | 9 | FluentAssertions.Equivalency .Execution |
| Iterator<T> | 0.62 | 0.75 | 9 | FluentAssertions.Common |
| DateTimeExtensions | 0 | 0 | 3 | FluentAssertions.Common |
| StringCollectionAssertions <TCollection> | 0 | 0 | 1 | FluentAssertions.Collections |
| XmlNodeAssertions | 0 | 0 | 1 | FluentAssertions.Xml |
| XmlElementAssertions | 0 | 0 | 21 | FluentAssertions.Xml |
| PredicateLambdaExpressionValueForm atter+ParameterDetector | 0 | 0 | 2 | FluentAssertions.Formatting |
| EquivalencyPlan | 0.27 | 0.3 | 31 | FluentAssertions |
| PropertyInfoExtensions | 0 | 0 | 5 | FluentAssertions.Common |
| MethodInfoAssertions | 0 | 0 | 23 | FluentAssertions.Types |
| AddNonEmptySymbolParsingStrategy+M ode | - | - | 0 | FluentAssertions .CallerIdentification |
| ObjectInfo | 0 | 0 | 6 | FluentAssertions.Equivalency .Execution |
| ValueFormatterDetectionMode | - | - | 0 | FluentAssertions.Common |
| EnumAssertions<TEnum> | 0 | 0 | 1 | FluentAssertions.Primitives |
| NullableEnumAssertions<TEnum> | 0 | 0 | 1 | FluentAssertions.Primitives |
| EnumerableExtensions | 0 | 0 | 6 | FluentAssertions.Common |
| DelegateAssertions<TDelegate ,TAssertions> | 0 | 0 | 22 | FluentAssertions.Specialized |
| TimeSpanPredicate | 0 | 0 | 4 | FluentAssertions.Primitives |
| MaximumMatchingSolver<TValue >+MatchCollection | 0 | 0 | 13 | FluentAssertions.Collections .MaximumMatching |
| MemberToMemberInfoAdapter | 0 | 0 | 8 | FluentAssertions.Equivalency .Selection |
| IMonitor<T> | - | - | 0 | FluentAssertions.Events |
| MethodInfoSelector | 0.14 | 0.15 | 24 | FluentAssertions.Types |
| PropertyInfoSelector | 0.17 | 0.18 | 24 | FluentAssertions.Types |
| AssertionEngineInitializerAttribut e | 0 | 0 | 3 | FluentAssertions.Extensibility |
| NullConfigurationStore | 0 | 0 | 2 | FluentAssertions.Common |
| TestFrameworkProvider | 0.75 | 0.9 | 23 | FluentAssertions.Execution |
| FullFrameworkReflector | 0 | 0 | 19 | FluentAssertions.Common |
| EquivalencyOptions | 0 | 0 | 5 | FluentAssertions.Equivalency |
| SubsequentOrderingAssertions<T> | 0 | 0 | 1 | FluentAssertions.Collections |
| SortOrder | - | - | 0 | FluentAssertions.Collections |
| XDocumentAssertions | 0 | 0 | 30 | FluentAssertions.Xml |
| XElementAssertions | 0 | 0 | 33 | FluentAssertions.Xml |
| XAttributeAssertions | 0 | 0 | 12 | FluentAssertions.Xml |
| PropertyInfoAssertions | 0 | 0 | 30 | FluentAssertions.Types |
| EventRecorder | 0.6 | 0.7 | 28 | FluentAssertions.Events |
| EnumerableEquivalencyValidator | 0.6 | 0.67 | 51 | FluentAssertions.Equivalency.Steps |
| AssertionResultSet | 0.2 | 0.25 | 15 | FluentAssertions.Equivalency.Steps |
| TypeMemberReflector | 0 | 0 | 47 | FluentAssertions.Common |
| AutoConversionStep | 0 | 0 | 23 | FluentAssertions.Equivalency.Steps |
| FluentTimeSpanExtensions | 0 | 0 | 9 | FluentAssertions.Extensions |
| MaximumMatchingSolver<TValue> | 0.38 | 0.5 | 33 | FluentAssertions.Collections .MaximumMatching |
| MemberPathSegmentEqualityComparer | 0 | 0 | 5 | FluentAssertions.Common |
| SelfReferenceEquivalencyOptions <TSelf>+Restriction<TMember>+< >c__3<TMemberType> | 0 | 0 | 1 | FluentAssertions.Equivalency |
| DateTimeOffsetRangeAssertions <TAssertions> | 0.48 | 0.6 | 28 | FluentAssertions.Primitives |
| DateTimeRangeAssertions <TAssertions> | 0.48 | 0.6 | 28 | FluentAssertions.Primitives |
| ThreadSafeSequenceGenerator | 0 | 0 | 2 | FluentAssertions.Events |
| AsyncFunctionAssertions<TTask ,TAssertions> | 0 | 0 | 62 | FluentAssertions.Specialized |
| PathBasedOrderingRule | 0.2 | 0.25 | 12 | FluentAssertions.Equivalency .Ordering |
| MappedPathMatchingRule | 0 | 0 | 16 | FluentAssertions.Equivalency .Matching |
| CollectionMemberOptionsDecorator | 0 | 0 | 28 | FluentAssertions.Equivalency .Execution |
| MappedMemberMatchingRule <TExpectation,TSubject> | 0 | 0 | 11 | FluentAssertions.Equivalency .Matching |
| IncludeMemberByPathSelectionRule | 0 | 0 | 14 | FluentAssertions.Equivalency .Selection |
| NestedExclusionOptionBuilder <TExpectation,TCurrent> | 0 | 0 | 3 | FluentAssertions.Equivalency |
| EnumerableEquivalencyStep | 0 | 0 | 26 | FluentAssertions.Equivalency.Steps |
| TaskCompletionSourceAssertions<T> | 0.25 | 0.33 | 23 | FluentAssertions.Specialized |
| GenericAsyncFunctionAssertions <TResult> | 0 | 0 | 43 | FluentAssertions.Specialized |
| EnumerableExtensions | 0 | 0 | 9 | FluentAssertions.Formatting |
| GivenSelectorExtensions+Collection WithIndex<T> | 0 | 0 | 9 | FluentAssertions.Execution |
| FunctionAssertionHelpers | 0 | 0 | 12 | FluentAssertions.Specialized |
| FullFrameworkReflector+<>O | 0 | 0 | 0 | FluentAssertions.Common |
| TaskCompletionSourceAssertionsBase | 0 | 0 | 18 | FluentAssertions.Specialized |
| ConversionSelector+ConversionSelec torRule | 0 | 0 | 1 | FluentAssertions.Equivalency |
| StringBuilderExtensions | 0 | 0 | 3 | System.Text |
| MaximumMatchingSolver<TValue >+BreadthFirstSearchTracker | 0.33 | 0.44 | 13 | FluentAssertions.Collections .MaximumMatching |
| MemberInfoAssertions<TSubject ,TAssertions>+<>c__1<TAttribute> | 0 | 0 | 1 | FluentAssertions.Types |
| MemberInfoAssertions<TSubject ,TAssertions>+<>c__2<TAttribute> | 0 | 0 | 1 | FluentAssertions.Types |
| NUnitTestFramework | 0 | 0 | 1 | FluentAssertions.Execution |
| XUnit2TestFramework | 0.5 | 1 | 6 | FluentAssertions.Execution |
| MSpecFramework | 0 | 0 | 1 | FluentAssertions.Execution |
| FallbackTestFramework | 0 | 0 | 2 | FluentAssertions.Execution |
| MSTestFrameworkV2 | 0 | 0 | 1 | FluentAssertions.Execution |
| Digit | 0.22 | 0.33 | 4 | FluentAssertions.Equivalency |
| PredicateLambdaExpressionValueForm atter+ConstantSubExpressionReducti onVisitor | 0 | 0 | 11 | FluentAssertions.Formatting |
| PredicateLambdaExpressionValueForm atter+AndOperatorChainExtractor | 0 | 0 | 8 | FluentAssertions.Formatting |
| Failure | 0 | 0 | 1 | FluentAssertions.Xml.Equivalency |
| XmlIterator | 0.25 | 0.33 | 17 | FluentAssertions.Xml.Equivalency |
| Node | 0.57 | 0.67 | 20 | FluentAssertions.Xml.Equivalency |
| CollectionMemberSelectionRuleDecor ator | 0 | 0 | 4 | FluentAssertions.Equivalency .Selection |
| CollectionMemberOrderingRuleDecora tor | 0 | 0 | 5 | FluentAssertions.Equivalency .Ordering |
| DoubleAssertions | 0 | 0 | 4 | FluentAssertions.Numeric |
| SingleAssertions | 0 | 0 | 4 | FluentAssertions.Numeric |
| DecimalAssertions | 0 | 0 | 6 | FluentAssertions.Numeric |
| GenericCollectionAssertions<T> | 0 | 0 | 1 | FluentAssertions.Collections |
| SingleLineCommentParsingStrategy | 0.25 | 0.33 | 5 | FluentAssertions .CallerIdentification |
| AddNonEmptySymbolParsingStrategy | 0.5 | 0.67 | 8 | FluentAssertions .CallerIdentification |
| SemicolonParsingStrategy | 0 | 0 | 3 | FluentAssertions .CallerIdentification |
| MultiLineCommentParsingStrategy | 0.62 | 0.83 | 8 | FluentAssertions .CallerIdentification |
| AwaitParsingStrategy | 0 | 0 | 7 | FluentAssertions .CallerIdentification |
| ShouldCallParsingStrategy | 0 | 0 | 7 | FluentAssertions .CallerIdentification |
| QuotesParsingStrategy | 0.6 | 0.75 | 8 | FluentAssertions .CallerIdentification |
| StringWildcardMatchingStrategy | 0 | 0 | 12 | FluentAssertions.Primitives |
| StringEqualityStrategy | 0 | 0 | 37 | FluentAssertions.Primitives |
| NegatedStringStartStrategy | 0 | 0 | 6 | FluentAssertions.Primitives |
| StringStartStrategy | 0 | 0 | 11 | FluentAssertions.Primitives |
| StringValidator | 0 | 0 | 9 | FluentAssertions.Primitives |
| StringSyntaxAttribute | 0 | 0 | 1 | System.Diagnostics.CodeAnalysis |
| StringAssertions<TAssertions>+<>O | 0 | 0 | 0 | FluentAssertions.Primitives |
| AssertionRuleEquivalencyStep <TSubject> | 0.67 | 0.8 | 33 | FluentAssertions.Equivalency.Steps |
| ExceptionAssertions<TException >+ExceptionMessageAssertion | 0 | 0 | 18 | FluentAssertions.Specialized |
| AssertionContext<TSubject> | 0 | 0 | 7 | FluentAssertions.Equivalency.Steps |
| RecordedEvent | 0 | 0 | 1 | FluentAssertions.Events |
| EventHandlerFactory | 0 | 0 | 32 | FluentAssertions.Events |
| <>f__AnonymousType0<<rule>j__TPar, <match>j__TPar> | 0 | 0 | 6 | |
| ValueTypeEquivalencyStep | 0 | 0 | 19 | FluentAssertions.Equivalency.Steps |
| StructuralEqualityEquivalencyStep | 0 | 0 | 45 | FluentAssertions.Equivalency.Steps |
| StringEqualityEquivalencyStep | 0 | 0 | 22 | FluentAssertions.Equivalency.Steps |
| XDocumentEquivalencyStep | 0 | 0 | 9 | FluentAssertions.Equivalency.Steps |
| MultiDimensionalArrayEquivalencySt ep | 0 | 0 | 28 | FluentAssertions.Equivalency |
| XElementEquivalencyStep | 0 | 0 | 9 | FluentAssertions.Equivalency.Steps |
| GenericDictionaryEquivalencyStep | 0 | 0 | 67 | FluentAssertions.Equivalency.Steps |
| EnumEqualityStep | 0 | 0 | 35 | FluentAssertions.Equivalency.Steps |
| DictionaryEquivalencyStep | 0 | 0 | 35 | FluentAssertions.Equivalency.Steps |
| GenericEnumerableEquivalencyStep | 0 | 0 | 44 | FluentAssertions.Equivalency.Steps |
| SimpleEqualityEquivalencyStep | 0 | 0 | 13 | FluentAssertions.Equivalency.Steps |
| RunAllUserStepsEquivalencyStep | 0 | 0 | 9 | FluentAssertions.Equivalency.Steps |
| ReferenceEqualityEquivalencyStep | 0 | 0 | 4 | FluentAssertions.Equivalency.Steps |
| XAttributeEquivalencyStep | 0 | 0 | 9 | FluentAssertions.Equivalency.Steps |
| <>f__AnonymousType5<<Type>j__TPar, <Method>j__TPar> | 0 | 0 | 6 | |
| <>f__AnonymousType3<<type>j__TPar, <method>j__TPar> | 0 | 0 | 6 | |
| <>f__AnonymousType4<<< >h__TransparentIdentifier0>j__TPar ,<methodParameters>j__TPar> | 0 | 0 | 6 | |
| AttributeBasedFormatter+<>O | 0 | 0 | 0 | FluentAssertions.Formatting |
| CallerIdentifier+StackFrameReferen ce | 0 | 0 | 7 | FluentAssertions |
| CallerStatementBuilder | 0.33 | 0.44 | 29 | FluentAssertions .CallerIdentification |
| CustomAssertionsAssemblyAttribute | 0 | 0 | 1 | FluentAssertions |
| CustomAssertionAttribute | 0 | 0 | 1 | FluentAssertions |
| FilteredEventRecording | 0.33 | 0.5 | 12 | FluentAssertions.Events |
| <>f__AnonymousType2<<< >h__TransparentIdentifier0>j__TPar ,<event>j__TPar> | 0 | 0 | 6 | |
| <>f__AnonymousType1<<eventName >j__TPar,<recording>j__TPar> | 0 | 0 | 6 | |
| MethodInfoSelectorAssertions+< >c__12<TAttribute> | 0 | 0 | 1 | FluentAssertions.Types |
| MethodInfoSelectorAssertions+< >c__10<TAttribute> | 0 | 0 | 1 | FluentAssertions.Types |
| ExceptionExtensions | 0 | 0 | 2 | FluentAssertions.Common |
| EnumerableEquivalencyValidatorExte nsions | 0 | 0 | 8 | FluentAssertions.Equivalency.Steps |
| EquivalencyValidationContextExtens ions | 0 | 0 | 3 | FluentAssertions.Equivalency.Steps |
| SByteValueFormatter | 0 | 0 | 5 | FluentAssertions.Formatting |
| ByteValueFormatter | 0 | 0 | 5 | FluentAssertions.Formatting |
| XmlNodeFormatter | 0 | 0 | 8 | FluentAssertions.Xml |
| AggregateExceptionValueFormatter | 0 | 0 | 14 | FluentAssertions.Formatting |
| AttributeBasedFormatter | 0.79 | 0.92 | 39 | FluentAssertions.Formatting |
| DateTimeOffsetValueFormatter | 0 | 0 | 21 | FluentAssertions.Formatting |
| Int32ValueFormatter | 0 | 0 | 4 | FluentAssertions.Formatting |
| Int16ValueFormatter | 0 | 0 | 5 | FluentAssertions.Formatting |
| MultidimensionalArrayFormatter | 0 | 0 | 15 | FluentAssertions.Formatting |
| Int64ValueFormatter | 0 | 0 | 5 | FluentAssertions.Formatting |
| GuidValueFormatter | 0 | 0 | 4 | FluentAssertions.Formatting |
| UInt64ValueFormatter | 0 | 0 | 5 | FluentAssertions.Formatting |
| ExceptionValueFormatter | 0 | 0 | 3 | FluentAssertions.Formatting |
| Formatter+ObjectGraph | 0.3 | 0.38 | 11 | FluentAssertions.Formatting |
| ExpressionValueFormatter | 0 | 0 | 4 | FluentAssertions.Formatting |
| TimeSpanValueFormatter | 0 | 0 | 22 | FluentAssertions.Formatting |
| TaskFormatter | 0 | 0 | 6 | FluentAssertions.Formatting |
| UInt16ValueFormatter | 0 | 0 | 5 | FluentAssertions.Formatting |
| UInt32ValueFormatter | 0 | 0 | 5 | FluentAssertions.Formatting |
| StringValueFormatter | 0 | 0 | 4 | FluentAssertions.Formatting |
| PredicateLambdaExpressionValueForm atter | 0 | 0 | 13 | FluentAssertions.Formatting |
| NullValueFormatter | 0 | 0 | 2 | FluentAssertions.Formatting |
| SingleValueFormatter | 0 | 0 | 9 | FluentAssertions.Formatting |
| PropertyInfoFormatter | 0 | 0 | 3 | FluentAssertions.Formatting |
| EnumValueFormatter | 0 | 0 | 10 | FluentAssertions.Formatting |
| DictionaryValueFormatter | 0 | 0 | 29 | FluentAssertions.Formatting |
| DefaultValueFormatter | 0 | 0 | 38 | FluentAssertions.Formatting |
| DecimalValueFormatter | 0 | 0 | 5 | FluentAssertions.Formatting |
| XmlReaderValueFormatter | 0 | 0 | 6 | FluentAssertions.Formatting |
| XElementValueFormatter | 0 | 0 | 9 | FluentAssertions.Formatting |
| XAttributeValueFormatter | 0 | 0 | 3 | FluentAssertions.Formatting |
| XDocumentValueFormatter | 0 | 0 | 4 | FluentAssertions.Formatting |
| DoubleValueFormatter | 0 | 0 | 10 | FluentAssertions.Formatting |
| EnumerableValueFormatter | 0 | 0 | 21 | FluentAssertions.Formatting |
| WhoseValueConstraint<TCollection ,TKey,TValue,TAssertions> | 0 | 0 | 1 | FluentAssertions.Collections |
| DictionaryHelpers | 0 | 0 | 24 | FluentAssertions.Common |
| ExcludeNonBrowsableMembersRule | 0 | 0 | 5 | FluentAssertions.Equivalency .Selection |
| IncludeMemberByPredicateSelectionR ule | 0.33 | 0.5 | 16 | FluentAssertions.Equivalency .Selection |
| ExcludeMemberByPredicateSelectionR ule | 0.33 | 0.5 | 10 | FluentAssertions.Equivalency .Selection |
| MustMatchByNameRule | 0 | 0 | 17 | FluentAssertions.Equivalency .Matching |
| TryMatchByNameRule | 0 | 0 | 11 | FluentAssertions.Equivalency .Matching |
| EqualityStrategyProvider | 0.21 | 0.25 | 29 | FluentAssertions.Equivalency |
| ByteArrayOrderingRule | 0 | 0 | 5 | FluentAssertions.Equivalency .Ordering |
| MatchAllOrderingRule | 0 | 0 | 2 | FluentAssertions.Equivalency .Ordering |
| PredicateBasedOrderingRule | 0.33 | 0.5 | 7 | FluentAssertions.Equivalency .Ordering |
| AllPropertiesSelectionRule | 0 | 0 | 10 | FluentAssertions.Equivalency .Selection |
| StringBuilderTraceWriter | 0.4 | 0.5 | 10 | FluentAssertions.Equivalency .Tracing |
| SelfReferenceEquivalencyOptions <TSelf>+Restriction<TMember> | 0.17 | 0.25 | 13 | FluentAssertions.Equivalency |
| AllFieldsSelectionRule | 0 | 0 | 10 | FluentAssertions.Equivalency .Selection |
| EqualityComparerEquivalencyStep<T> | 0 | 0 | 25 | FluentAssertions.Equivalency.Steps |
| DictionaryInterfaceInfo | 0 | 0 | 34 | FluentAssertions.Equivalency.Steps |
| GenericDictionaryEquivalencyStep+K eyDifference<TSubjectKey ,TExpectedKey> | 0 | 0 | 1 | FluentAssertions.Equivalency.Steps |
| GenericCollectionAssertions <TCollection,T,TAssertions>+<>c__6 <TExpectation> | 0 | 0 | 1 | FluentAssertions.Collections |
| GivenSelectorExtensions | 0 | 0 | 14 | FluentAssertions.Execution |
| BooleanAssertions | 0 | 0 | 1 | FluentAssertions.Primitives |
| ExecutionTimeAssertions | 0.12 | 0.14 | 28 | FluentAssertions.Specialized |
| AssemblyAssertions | 0 | 0 | 36 | FluentAssertions.Types |
| ActionAssertions | 0 | 0 | 23 | FluentAssertions.Specialized |
| GenericDictionaryAssertions <TCollection,TKey,TValue> | 0 | 0 | 1 | FluentAssertions.Collections |
| NonGenericAsyncFunctionAssertions | 0 | 0 | 43 | FluentAssertions.Specialized |
| FunctionAssertions<T> | 0 | 0 | 14 | FluentAssertions.Specialized |
| MemberExecutionTime<T> | 0 | 0 | 8 | FluentAssertions.Specialized |
| StringCollectionAssertions | 0 | 0 | 1 | FluentAssertions.Collections |
| EventMonitor<T> | 0.58 | 0.67 | 43 | FluentAssertions.Events |
| MethodInfoSelectorAssertions | 0 | 0 | 27 | FluentAssertions.Types |
| ConstructorInfoAssertions | 0 | 0 | 5 | FluentAssertions.Types |
| NullableByteAssertions | 0 | 0 | 3 | FluentAssertions.Numeric |
| PropertyInfoSelectorAssertions | 0 | 0 | 21 | FluentAssertions.Types |
| BufferedStreamAssertions | 0 | 0 | 1 | FluentAssertions.Streams |
| StreamAssertions | 0 | 0 | 1 | FluentAssertions.Streams |
| AggregateExceptionExtractor | 0 | 0 | 10 | FluentAssertions |
| TypeSelectorAssertions | 0 | 0 | 27 | FluentAssertions.Types |
| UInt32Assertions | 0 | 0 | 3 | FluentAssertions.Numeric |
| UInt16Assertions | 0 | 0 | 3 | FluentAssertions.Numeric |
| SByteAssertions | 0 | 0 | 3 | FluentAssertions.Numeric |
| NullableInt16Assertions | 0 | 0 | 3 | FluentAssertions.Numeric |
| Int64Assertions | 0 | 0 | 7 | FluentAssertions.Numeric |
| NullableDecimalAssertions | 0 | 0 | 6 | FluentAssertions.Numeric |
| NullableDoubleAssertions | 0 | 0 | 4 | FluentAssertions.Numeric |
| NullableUInt16Assertions | 0 | 0 | 3 | FluentAssertions.Numeric |
| NullableUInt32Assertions | 0 | 0 | 3 | FluentAssertions.Numeric |
| NullableUInt64Assertions | 0 | 0 | 7 | FluentAssertions.Numeric |
| NullableSingleAssertions | 0 | 0 | 4 | FluentAssertions.Numeric |
| NullableInt32Assertions | 0 | 0 | 3 | FluentAssertions.Numeric |
| NullableInt64Assertions | 0 | 0 | 7 | FluentAssertions.Numeric |
| NullableSByteAssertions | 0 | 0 | 3 | FluentAssertions.Numeric |
| Int32Assertions | 0 | 0 | 3 | FluentAssertions.Numeric |
| NullableDateTimeOffsetAssertions | 0 | 0 | 1 | FluentAssertions.Primitives |
| DateTimeAssertions | 0 | 0 | 1 | FluentAssertions.Primitives |
| NullableBooleanAssertions | 0 | 0 | 1 | FluentAssertions.Primitives |
| DateTimeOffsetAssertions | 0 | 0 | 1 | FluentAssertions.Primitives |
| NullableDateTimeAssertions | 0 | 0 | 1 | FluentAssertions.Primitives |
| HttpResponseMessageAssertions | 0 | 0 | 1 | FluentAssertions.Primitives |
| GuidAssertions | 0 | 0 | 1 | FluentAssertions.Primitives |
| UInt64Assertions | 0 | 0 | 7 | FluentAssertions.Numeric |
| Int16Assertions | 0 | 0 | 3 | FluentAssertions.Numeric |
| ComparableTypeAssertions<T> | 0 | 0 | 1 | FluentAssertions.Numeric |
| ByteAssertions | 0 | 0 | 3 | FluentAssertions.Numeric |
| SimpleTimeSpanAssertions | 0 | 0 | 1 | FluentAssertions.Primitives |
| NullableGuidAssertions | 0 | 0 | 1 | FluentAssertions.Primitives |
| NullableSimpleTimeSpanAssertions | 0 | 0 | 1 | FluentAssertions.Primitives |
| SkipLocalsInitAttribute | 0 | 0 | 1 | System.Runtime.CompilerServices |
| RequiredMemberAttribute | 0 | 0 | 1 | System.Runtime.CompilerServices |
| ModuleInitializerAttribute | 0 | 0 | 1 | System.Runtime.CompilerServices |
| MemberNotNullAttribute | 0 | 0 | 1 | System.Diagnostics.CodeAnalysis |
| IsExternalInit | 0 | 0 | 0 | System.Runtime.CompilerServices |
| FluentDateTimeExtensions | 0 | 0 | 27 | FluentAssertions.Extensions |
| SubjectInfoExtensions | 0 | 0 | 3 | FluentAssertions.Equivalency |
| BooleanAssertionsExtensions | 0 | 0 | 8 | FluentAssertions.Primitives |
| OccurrenceConstraintExtensions | 0 | 0 | 3 | FluentAssertions.Extensions |
| RefSafetyRulesAttribute | 0 | 0 | 1 | System.Runtime.CompilerServices |
| InterpolatedStringHandlerArgumentA ttribute | 0 | 0 | 1 | System.Runtime.CompilerServices |
| InterpolatedStringHandlerAttribute | 0 | 0 | 1 | System.Runtime.CompilerServices |
| RequiresPreviewFeaturesAttribute | 0 | 0 | 1 | System.Runtime.Versioning |
| CompilerFeatureRequiredAttribute | 0 | 0 | 1 | System.Runtime.CompilerServices |
| MemberNotNullWhenAttribute | 0 | 0 | 1 | System.Diagnostics.CodeAnalysis |
| MoreThan | 0 | 0 | 1 | FluentAssertions |
| NumericAssertionsExtensions | 0 | 0 | 28 | FluentAssertions |
| FluentActions | 0 | 0 | 2 | FluentAssertions |
| LessThan | 0 | 0 | 1 | FluentAssertions |
| XmlAssertionExtensions | 0 | 0 | 2 | FluentAssertions |
| AllTypes | 0 | 0 | 1 | FluentAssertions.Types |
| ObjectAssertionsExtensions | 0 | 0 | 29 | FluentAssertions |
| TypeEnumerableExtensions | 0 | 0 | 16 | FluentAssertions |
| ExceptionAssertionsExtensions | 0 | 0 | 23 | FluentAssertions |
| UnscopedRefAttribute | 0 | 0 | 1 | System.Diagnostics.CodeAnalysis |
| AsyncAssertionsExtensions | 0 | 0 | 13 | FluentAssertions |
| SetsRequiredMembersAttribute | 0 | 0 | 1 | System.Diagnostics.CodeAnalysis |
| SubsequentOrderingGenericCollectio nAssertions<TCollection,T> | 0 | 0 | 1 | FluentAssertions.Collections |
| GenericCollectionAssertions <TCollection,T> | 0 | 0 | 1 | FluentAssertions.Collections |
| EventRaisingExtensions | 0 | 0 | 34 | FluentAssertions |
| ValueFormatterAttribute | 0 | 0 | 1 | FluentAssertions.Formatting |
| EnumAssertionsExtensions | 0 | 0 | 2 | FluentAssertions |
Namespaces Metrics
Clicking column header arrows sorts values.
Clicking column header title text redirect to the online Code Metric definition.
| Namespaces | # lines of code | # IL instruction | # Types | # lines of comment | % Comment | % Coverage | Afferent Coupling | Efferent Coupling |
|---|---|---|---|---|---|---|---|---|
| 0 | 570 | 6 | - | - | - | 3 | 5 | |
| Microsoft.CodeAnalysis | 0 | 4 | 1 | - | - | - | 1 | 2 |
| FluentAssertions.dll::System.Text | 2 | 10 | 1 | 6 | 75 | - | 1 | 4 |
| FluentAssertions.dll::System .Runtime.CompilerServices | 14 | 103 | 11 | - | - | - | 14 | 6 |
| FluentAssertions.dll::System .Runtime.Versioning | 6 | 23 | 1 | - | - | - | 0 | 5 |
| FluentAssertions.dll::System .Diagnostics.CodeAnalysis | 21 | 92 | 5 | - | - | - | 1 | 5 |
| FluentAssertions | 723 | 6568 | 32 | 1422 | 66.29 | 94.88 | 13 | 36 |
| FluentAssertions.Types | 826 | 8484 | 18 | 1870 | 69.36 | 97.7 | 3 | 15 |
| FluentAssertions.Streams | 86 | 1101 | 4 | 176 | 67.18 | 93.02 | 1 | 6 |
| FluentAssertions.Specialized | 388 | 5868 | 16 | 620 | 61.51 | 96.65 | 1 | 18 |
| FluentAssertions.Primitives | 851 | 11785 | 43 | 3760 | 81.54 | 99.41 | 9 | 21 |
| FluentAssertions.Numeric | 210 | 2418 | 28 | 555 | 72.55 | 98.57 | 1 | 16 |
| FluentAssertions.Formatting | 514 | 4497 | 47 | 466 | 47.55 | 96.5 | 7 | 23 |
| FluentAssertions.Extensions | 74 | 665 | 3 | 248 | 77.02 | 100 | 0 | 5 |
| FluentAssertions.Extensibility | 4 | 31 | 1 | 6 | 60 | 100 | 1 | 2 |
| FluentAssertions.Execution | 389 | 3040 | 28 | 451 | 53.69 | 93.57 | 16 | 18 |
| FluentAssertions.Events | 195 | 1455 | 11 | 191 | 49.48 | 93.33 | 1 | 17 |
| FluentAssertions.Common | 615 | 5004 | 32 | 273 | 30.74 | 95.28 | 17 | 23 |
| FluentAssertions .CallerIdentification | 109 | 912 | 11 | 28 | 20.44 | 100 | 1 | 7 |
| FluentAssertions.Xml | 142 | 1505 | 7 | 462 | 76.49 | 99.3 | 3 | 13 |
| FluentAssertions.Xml.Equivalency | 152 | 1227 | 5 | 11 | 6.75 | 99.34 | 1 | 10 |
| FluentAssertions.Equivalency | 580 | 4155 | 41 | 781 | 57.38 | 97.18 | 12 | 25 |
| FluentAssertions.Equivalency .Tracing | 23 | 172 | 4 | 35 | 60.34 | 95.65 | 6 | 6 |
| FluentAssertions.Equivalency.Steps | 490 | 4774 | 24 | 84 | 14.63 | 93.47 | 3 | 23 |
| FluentAssertions.Equivalency .Selection | 79 | 541 | 10 | 39 | 33.05 | 94.94 | 2 | 11 |
| FluentAssertions.Equivalency .Ordering | 48 | 307 | 6 | 17 | 26.15 | 91.67 | 2 | 8 |
| FluentAssertions.Equivalency .Matching | 49 | 376 | 4 | 26 | 34.67 | 100 | 1 | 6 |
| FluentAssertions.Equivalency .Execution | 55 | 379 | 4 | 38 | 40.86 | 98.18 | 3 | 12 |
| FluentAssertions.Collections | 989 | 10851 | 14 | 1909 | 65.87 | 95.75 | 2 | 19 |
| FluentAssertions.Collections .MaximumMatching | 90 | 651 | 8 | 57 | 38.78 | 96.67 | 1 | 9 |
| Quality Gates 812 |
|
| Quality Gate Pass: Percentage Coverage |
Scalar Result: 96.41 %
| Quality Gate Pass: Percentage Coverage on New Code |
Scalar Result: NaN %
| Quality Gate Pass: Percentage Coverage on Refactored Code |
Scalar Result: NaN %
| Quality Gate Pass: Blocker Issues |
No issue matched
| Quality Gate Warn: Critical Issues |
3 issues matched
| 3 issues | Severity | Debt | Annual Interest | Full Name |
|---|---|---|---|---|
| Critical issue on: | 0Critical | |m0|0| 50min | 02h 0min | Rule violated: Avoid types initialization cycles |
| Critical issue on: | 1Critical | |m0|1| 50min | 12h 0min | Rule violated: Avoid types initialization cycles |
| Critical issue on: | 2Critical | |m0|2| 50min | 22h 0min | Rule violated: Avoid types initialization cycles |
| Quality Gate Pass: New Blocker / Critical / High Issues |
No issue matched
| Quality Gate Fail: Critical Rules Violated |
5 rules matched
| 5 rules | issues | Full Name |
|---|---|---|
| Avoid types too big | |m0|2| 1 issue
| Rule |
| Avoid methods too big, too complex | |m0|3| 1 issue
| Rule |
| Avoid namespaces mutually dependent | |m100|0| First 5 of 210 issues
| Rule |
| Avoid non-readonly static fields | |m1|1| 4 issues
| Rule |
| Avoid having different types with same name | |m0|4| 1 issue
| Rule |
| Quality Gate Pass: Percentage Debt |
Scalar Result: 6.72 %
| Quality Gate Pass: New Debt since Baseline |
Scalar Result: 0 man-days
| Quality Gate Fail: Debt Rating per Namespace |
2 namespaces matched
| 2 namespaces | debtRating | debtRatio | devTimeInManDay | debtInManDay | issues | Full Name |
|---|---|---|---|---|---|---|
| 0E | |m100|0| 52.27 | |m0|1| 51min | |m0|1| 27min | |m0|1| First 5 of 6 issues
| System.Text | |
| 1D | |m0|1| 21.99 | |m100|0| 19d 0h | |m100|0| 4d 1h | |m100|0| First 5 of 132 issues
| FluentAssertions |
| Quality Gate Pass: New Annual Interest since Baseline |
Scalar Result: 0 man-days
| Hot Spots 000 |
| Code Smells 000 |
| Code Smells Regression 000 |
| Object Oriented Design 000 |
| Design 000 |
| Architecture 000 |
| API Breaking Changes 000 |
| Code Coverage 000 |
| Dead Code 000 |
| Security 000 |
| Visibility 000 |
| Immutability 000 |
| Naming Conventions 000 |
| Source Files Organization 000 |
| .NET Framework Usage 000 |
| API Usage 000 |
| Defining JustMyCode 000 |
| Trend Metrics 000 |
| Code Diff Summary 000 |
| Rules extracted from Source Code 000 |
| Code Smells 332 |
| Rule Violated: ND1005: Avoid methods with too many overloads |
• How to Fix Issues of this Rule: In such situation, the C# language feature optional parameters, named arguments or parameter array (with the params keyword) can be used instead. The estimated Debt, which means the effort to fix such issue, is of 3 minutes per method overload.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1005:AvoidMethodsWithTooManyOverloads", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
4 methods matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| Rule Violated: ND1001: Avoid types with too many methods |
• How to Fix Issues of this Rule: To refactor properly a God Class please read HowToFix advices from the default rule Types too Big. The estimated Debt, which means the effort to fix such issue, varies linearly from 1 hour for a type with 20 methods, up to 10 hours for a type with 200 or more methods. In Debt and Interest computation, this rule takes account of the fact that static types with no mutable fields are just a collection of static methods that can be easily split and moved from one type to another.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1001:AvoidTypesWithTooManyMethods", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
4 types matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| Rule Violated: ND1006: Avoid methods potentially poorly commented |
• How to Fix Issues of this Rule: Typically add more comment. But code commenting is subject to controversy. While poorly written and designed code would needs a lot of comment to be understood, clean code doesn't need that much comment, especially if variables and methods are properly named and convey enough information. Unit-Test code can also play the role of code commenting. However, even when writing clean and well-tested code, one will have to write hacks at a point, usually to circumvent some API limitations or bugs. A hack is a non-trivial piece of code, that doesn't make sense at first glance, and that took time and web research to be found. In such situation comments must absolutely be used to express the intention, the need for the hacks and the source where the solution has been found. The estimated Debt, which means the effort to comment such method, varies linearly from 2 minutes for 10 lines of code not commented, up to 20 minutes for 200 or more, lines of code not commented.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1006:AvoidMethodsPotentiallyPoorlyCommented", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
2 methods matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 2 methods | Percentage Comment | # lines of code (LOC) | # lines of comment | nbLinesOfCodeNotCommented | Debt | Annual Interest | Full Name |
|---|---|---|---|---|---|---|---|
| |m0|1| 0 | |m100|0| 35 | |m0|1| 0 | |m100|0| 35 | |m100|0| 3min 30s | 016min | FluentAssertions.Equivalency .SelfReferenceEquivalencyOptions <TSelf>.ToString() | |
| |m100|0| 2.94 | |m0|1| 33 | |m100|0| 1 | |m0|1| 32 | |m0|1| 3min 12s | 113min | FluentAssertions.Formatting .DateTimeOffsetValueFormatter .Format(Object ,FormattedObjectGraph ,FormattingContext,FormatChild) |
| Critical Rule Violated: ND1000: Avoid types too big |
• How to Fix Issues of this Rule: Types with many lines of code should be split in a group of smaller types. To refactor a God Class you'll need patience, and you might even need to recreate everything from scratch. Here are a few refactoring advices: • The logic in the God Class must be split in smaller classes. These smaller classes can eventually become private classes nested in the original God Class, whose instances objects become composed of instances of smaller nested classes. • Smaller classes partitioning should be driven by the multiple responsibilities handled by the God Class. To identify these responsibilities it often helps to look for subsets of methods strongly coupled with subsets of fields. • If the God Class contains way more logic than states, a good option can be to define one or several static classes that contains no static field but only pure static methods. A pure static method is a function that computes a result only from inputs parameters, it doesn't read nor assign any static or instance field. The main advantage of pure static methods is that they are easily testable. • Try to maintain the interface of the God Class at first and delegate calls to the new extracted classes. In the end the God Class should be a pure facade without its own logic. Then you can keep it for convenience or throw it away and start to use the new classes only. • Unit Tests can help: write tests for each method before extracting it to ensure you don't break functionality. The estimated Debt, which means the effort to fix such issue, varies linearly from 1 hour for a 200 lines of code type, up to 10 hours for a type with 2.000 or more lines of code. In Debt and Interest computation, this rule takes account of the fact that static types with no mutable fields are just a collection of static methods that can be easily split and moved from one type to another.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1000:AvoidTypesTooBig", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 type matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 type | locJustMyCode | # IL instructions | Methods | Fields | Debt | Annual Interest | Full Name |
|---|---|---|---|---|---|---|---|
| |m0|0| 279 | |m0|0| 2 325 | |m0|0| First 5 of 40 methods
| 0no field | |m0|0| 1h 23min | 07min | FluentAssertions .NumericAssertionsExtensions |
| Critical Rule Violated: ND1003: Avoid methods too big, too complex |
• How to Fix Issues of this Rule: A large and complex method should be split in smaller methods, or even one or several classes can be created for that. During this process it is important to question the scope of each variable local to the method. This can be an indication if such local variable will become an instance field of the newly created class(es). Large switch…case structures might be refactored through the help of a set of types that implement a common interface, the interface polymorphism playing the role of the switch cases tests. Unit Tests can help: write tests for each method before extracting it to ensure you don't break functionality. The estimated Debt, which means the effort to fix such issue, varies from 20 minutes to 3 hours, linearly from a weighted complexity score.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1003:AvoidMethodsTooBigTooComplex", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 method matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 method | # lines of code (LOC) | Cyclomatic Complexity (CC) | IL Cyclomatic Complexity (ILCC) | IL Nesting Depth | complexityScore | Debt | Annual Interest | Full Name |
|---|---|---|---|---|---|---|---|---|
| |m0|0| 40 | |m0|0| 22 | |m0|0| 31 | |m0|0| 4 | |m0|0| 64 | |m0|0| 34min | 09min | FluentAssertions.Xml.Equivalency .XmlReaderValidator.Validate() |
| Object Oriented Design 1040 |
| Rule Violated: ND1203: Class with no descendant should be sealed if possible |
• How to Fix Issues of this Rule: For each matched class, take the time to assess if it is really meant to be subclassed. Certainly most matched class will end up being declared as sealed.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1203:ClassWithNoDescendantShouldBeSealedIfPossible", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
68 types matched
- The following list of types is truncated and contains only the first 20 types of the 68 types matched.
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 68 types | # lines of code (LOC) | Debt | Severity | Full Name |
|---|---|---|---|---|
| |m100|00| 90 | |m0|06| 0min 30s | 06Medium | FluentAssertions.Equivalency.Steps .EnumerableEquivalencyValidator | |
| |m89|01| 81 | |m0|05| 0min 30s | 05Medium | FluentAssertions.Xml.Equivalency .XmlReaderValidator | |
| |m71|02| 65 | |m0|07| 0min 30s | 07Medium | FluentAssertions.Primitives .StringEqualityStrategy | |
| |m43|03| 40 | |m0|09| 0min 30s | 09Medium | FluentAssertions.Execution .MessageBuilder | |
| |m37|04| 34 | |m0|08| 0min 30s | 08Medium | FluentAssertions.Collections .MaximumMatching .MaximumMatchingSolver<TValue> | |
| |m31|05| 29 | |m0|01| 0min 30s | 01Medium | FluentAssertions.Formatting .FormattedObjectGraph+PossibleMult ilineFragment | |
| |m30|06| 28 | |m0|00| 0min 30s | 00Medium | FluentAssertions.Equivalency .MultiDimensionalArrayEquivalencyS tep | |
| |m29|07| 27 | |m0|02| 0min 30s | 02Medium | FluentAssertions.Common.MemberPath | |
| |m26|09| 25 | |m0|04| 0min 30s | 04Medium | FluentAssertions.Execution .ContextDataItems | |
| |m26|08| 25 | |m0|03| 0min 30s | 03Medium | FluentAssertions.Xml.Equivalency .XmlIterator | |
| |m24|10| 23 | |m0|16| 0min 30s | 16Medium | FluentAssertions .CallerIdentification .CallerStatementBuilder | |
| |m23|11| 22 | |m0|15| 0min 30s | 15Medium | FluentAssertions.Execution .TestFrameworkProvider | |
| |m22|13| 21 | |m0|17| 0min 30s | 17Medium | FluentAssertions.Primitives .StringWildcardMatchingStrategy | |
| |m22|12| 21 | |m0|19| 0min 30s | 19Medium | FluentAssertions.Equivalency .Execution .CollectionMemberOptionsDecorator | |
| |m19|16| 18 | |m0|18| 0min 30s | 18Medium | FluentAssertions .CallerIdentification .QuotesParsingStrategy | |
| |m19|15| 18 | |m0|11| 0min 30s | 11Medium | FluentAssertions.Equivalency .Ordering.PathBasedOrderingRule | |
| |m19|14| 18 | |m0|10| 0min 30s | 10Medium | FluentAssertions.Equivalency .Matching.MappedPathMatchingRule | |
| |m16|19| 16 | |m0|12| 0min 30s | 12Medium | FluentAssertions.Execution .CollectingAssertionStrategy | |
| |m16|18| 16 | |m0|14| 0min 30s | 14Medium | FluentAssertions.Equivalency.Digit | |
| |m16|17| 16 | |m0|13| 0min 30s | 13Medium | FluentAssertions.Equivalency.Steps .AssertionResultSet |
| Rule Violated: ND1213: Avoid types initialization cycles |
• How to Fix Issues of this Rule: Types initialization cycles create confusion and unexpected behaviors. If several states hold by several classes must be initialized during the first access of any of those classes, a better design option is to create a dedicated class whose responsibility is to initialize and hold all these states. The estimated Debt, which means the effort to fix such issue, is equal to 20 minutes per cycle plus 10 minutes per type class constructor involved in the cycle.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1213:AvoidTypesInitializationCycles", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
3 methods matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| Rule Violated: ND1200: Avoid interfaces too big |
• How to Fix Issues of this Rule: Typically to fix such issue, the interface must be refactored in a grape of smaller single-responsibility interfaces. For example if an interface IFoo handles both read and write operations, it can be split into two interfaces: IFooReader and IFooWriter. A usual problem for a large public interface is that it has many clients that consume it. As a consequence splitting it in smaller interfaces has an important impact and it is not always feasible. The estimated Debt, which means the effort to fix such issue, varies linearly from 20 minutes for an interface with 10 methods, up to 7 hours for an interface with 100 or more methods. The Debt is divided by two if the interface is not publicly visible, because in such situation only the current project is impacted by the refactoring.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1200:AvoidInterfacesTooBig", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 type matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 type | Members | Events | membersCount | Debt | Annual Interest | Full Name |
|---|---|---|---|---|---|---|
| |m0|0| First 5 of 1 method 16 properties
| 0no event | |m0|0| 17 | |m0|0| 51min | 011min | FluentAssertions.Equivalency .IEquivalencyOptions |
| Rule Violated: ND1202: Class shouldn't be too deep in inheritance tree |
• How to Fix Issues of this Rule: In Object-Oriented Programming, a well-known motto is Favor Composition over Inheritance. This is because inheritance comes with pitfalls. In general, the implementation of a derived class is very bound up with the base class implementation. Also a base class exposes implementation details to its derived classes, that's why it's often said that inheritance breaks encapsulation. On the other hands, Composition favors binding with interfaces over binding with implementations. Hence, not only the encapsulation is preserved, but the design is clearer, because interfaces make it explicit and less coupled. Hence, to break a long inheritance chain, Composition is often a powerful way to enhance the design of the refactored underlying logic. You can also read: http://en.wikipedia.org/wiki/Composition_over_inheritance and http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance The estimated Debt, which means the effort to fix such issue, depends linearly upon the depth of inheritance.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1202:ClassShouldntBeTooDeepInInheritanceTree", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 type matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 type | baseClasses | Depth of inheritance | Debt | Severity | Full Name |
|---|---|---|---|---|---|
| |m0|0| 4 types
| |m0|0| 5 | |m0|0| 6min | 0Medium | FluentAssertions.Collections .StringCollectionAssertions |
| Design 660 |
| Rule Violated: ND1305: Avoid namespaces with few types |
• How to Fix Issues of this Rule: To fix a violation of this rule, try to combine namespaces that contain just a few types into a single namespace.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1305:AvoidNamespacesWithFewTypes", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
4 namespaces matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 4 namespaces | types | Debt | Severity | Full Name |
|---|---|---|---|---|
| |m0|3| 1 type | |m0|1| 5min | 1Low | System.Text | |
| |m100|0| 4 types | |m0|0| 5min | 0Low | FluentAssertions.Equivalency .Tracing | |
| |m100|1| 4 types | |m0|3| 5min | 3Low | FluentAssertions.Equivalency .Matching | |
| |m100|2| 4 types | |m0|2| 5min | 2Low | FluentAssertions.Equivalency .Execution |
| Rule Violated: ND1300: Avoid custom delegates |
• How to Fix Issues of this Rule: Remove custom delegates and replace them with generic delegates shown in the replaceWith column. The estimated Debt, which means the effort to fix such issue, is 5 minutes per custom delegates plus 3 minutes per method using such custom delegate.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1300:AvoidCustomDelegates", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
4 types matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| Rule Violated: ND1306: Nested types should not be visible |
• How to Fix Issues of this Rule: If you do not intend the nested type to be externally visible, change the type's accessibility. Otherwise, remove the nested type from its parent and make it non-nested. If the purpose of the nesting is to group some nested types, use a namespace to create the hierarchy instead. The estimated Debt, which means the effort to fix such issue, is 2 minutes per nested type plus 4 minutes per outter type using such nesting type.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1306:NestedTypesShouldNotBeVisible", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
3 types matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 3 types | Visibility | typesUser | Debt | Severity | Full Name |
|---|---|---|---|---|---|
| 1internal | |m100|1| 1 type | |m100|1| 6min | 0Medium | FluentAssertions.Formatting .FormattedObjectGraph+PossibleMult ilineFragment | |
| 0internal | |m100|0| 1 type | |m100|0| 6min | 1Medium | FluentAssertions.Execution .ContextDataItems+DataItem | |
| 2public | 2no type | |m0|2| 2min 0s | 2Medium | FluentAssertions.Equivalency .SelfReferenceEquivalencyOptions <TSelf>+Restriction<TMember> |
| Rule Violated: ND1310: Attribute classes should be sealed |
• How to Fix Issues of this Rule: To fix a violation of this rule, seal the attribute type or make it abstract.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1310:AttributeClassesShouldBeSealed", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
2 types matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 2 types | # lines of code (LOC) | Debt | Severity | Full Name |
|---|---|---|---|---|
| |m0|0| 0 | |m0|0| 2min 0s | 0Medium | FluentAssertions .CustomAssertionAttribute | |
| |m0|1| 0 | |m0|1| 2min 0s | 1Medium | FluentAssertions.Formatting .ValueFormatterAttribute |
| Rule Violated: ND1313: Override equals and operator equals on value types |
• How to Fix Issues of this Rule: To fix a violation of this rule, provide an implementation of Equals() and GetHashCode() and implement the equality and inequality operators. Alternatively transform it into a record struct. The estimated Debt, which means the effort to fix such issue, is equal to 15 minutes plus 2 minutes per instance field.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1313:OverrideEqualsAndOperatorEqualsOnValueTypes", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 type matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 type | InstanceFields | Debt | Severity | Full Name |
|---|---|---|---|---|
| |m0|0| 2 fields | |m0|0| 16min | 0High | FluentAssertions.Collections .MaximumMatching .MaximumMatchingSolver<TValue >+Match |
| Rule Violated: ND1311: Don't use obsolete types, methods or fields |
• How to Fix Issues of this Rule: Typically when a code element is tagged with System.ObsoleteAttribute, a workaround message is provided to clients. This workaround message will tell you what to do to avoid using the obsolete code element. The estimated Debt, which means the effort to fix such issue, is 5 minutes per type, method or field used. Issues of this rule have a severity High because it is important to not rely anymore on obsolete code.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1311:DontUseObsoleteTypesMethodsOrFields", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 method matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 method | obsoleteUsage | Debt | Severity | Full Name |
|---|---|---|---|---|
| |m0|0| 1 method | |m0|0| 5min | 0High | FluentAssertions.Equivalency .Ordering .CollectionMemberObjectInfo..ctor (IObjectInfo) |
| Architecture 521 |
|
| Critical Rule Violated: ND1400: Avoid namespaces mutually dependent |
• How to Fix Issues of this Rule: Refactor the code to make sure that the low-level namespace doesn't use the high-level namespace. The rule lists in detail which low-level types and methods shouldn't use which high-level types and methods. The refactoring patterns that help getting rid of each listed dependency include: • Moving one or several types from the low-level namespaces to the high-level one, or do the opposite. • Use Dependency Inversion Principle (DIP): https://blog.ndepend.com/solid-design-the-dependency-inversion-principle-dip This consists in creating new interfaces in the low-level namespace, implemented by classes in the high-level namespace. This way low-level code can consume high-level code through interfaces, without using directly high-level implementations. Interfaces can be passed to low-level code through the high-level namespace code, or through even higher-level code. In related documentations you can see these interfaces named as callbacks, and the overall pattern is also known as Dependency Injection (DI): http://en.wikipedia.org/wiki/Dependency_injection That rule might not be applicable for libraries that present public namespaces mutually dependent. In such situation the cost to break the API can be higher than the cost to let the code entangled. - The estimated Debt, which means the effort to fix such issue to make sure that the first namespace doesn't rely anymore on the second one, depends on the number of types and methods used. Because both namespace are now forming a super-component that cannot be partitioned in smaller components, the cost to unfix each issue is proportional to the size of this super-component. As a consequence, the estimated Annual Interest, which means the annual cost to let both namespaces mutually dependend, is equal to an hour plus a number of minutes proportional to the size (in lines of code) of both namespaces. The obtained Annual Interest value is then divided by the number of detailled issues listed. Often the estimated Annual Interest for each listed issue is higher than the Debt, which means that leaving such issue unfixed for a year costs more than taking the time to fix issue once. -- To explore the coupling between the two namespaces mutually dependent: 1) from the becauseNamespace right-click menu choose Copy to Matrix Columns to export this low-level namespace to the horizontal header of the dependency matrix. 2) from the shouldntUseNamespace right-click menu choose Copy to Matrix Rows to export this high-level namespace to the vertical header of the dependency matrix. 3) double-click the black matrix cell (it is black because of the mutual dependency). 4) in the matrix command bar, click the button: Remove empty Row(s) and Column(s). At this point, the dependency matrix shows types involved into the coupling. • Blue cells represent types from low-level namespace using types from high-level namespace • Green cells represent types from high-level namespace using types from low-level namespace • Black cells represent types from low-level and high-level namespaces that use each other. There are more green cells than blue and black cells because green cell represents correct coupling from high-level to low-level. The goal is to eliminate incorrect dependencies represented by blue and black cells.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1400:AvoidNamespacesMutuallyDependent", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
223 members matched
- The following list of members is truncated and contains only the first 20 members of the 223 members matched.
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 223 types and methods | shouldntUse | becauseNamespace | shouldntUseNamespace | Debt | Annual Interest | Full Name |
|---|---|---|---|---|---|---|
| |m0|07| 1 type | 06 | 06 | |m0|07| 15min | 063min 55s | FluentAssertions .AggregateExceptionExtractor | |
| |m42|00| First 5 of 10 types | 05 | 05 | |m100|00| 1h 0min | 053min 55s | FluentAssertions .AssertionExtensions | |
| |m4|01| 2 types | 07 | 07 | |m11|01| 20min | 073min 55s | FluentAssertions .AsyncAssertionsExtensions | |
| |m0|08| 1 type | 09 | 09 | |m0|08| 15min | 093min 55s | FluentAssertions .ExceptionAssertionsExtensions | |
| |m0|09| 1 method | 08 | 08 | |m0|09| 15min | 083min 55s | FluentAssertions .AssertionExtensions .ExecutionTimeOf<T>(T,Expression <Action<T>>,StartTimer) | |
| |m0|06| 1 method | 01 | 01 | |m0|06| 15min | 013min 55s | FluentAssertions .AssertionExtensions.ExecutionTime (Action,StartTimer) | |
| |m0|03| 1 method | 00 | 00 | |m0|03| 15min | 003min 55s | FluentAssertions .AssertionExtensions.ExecutionTime (Func<Task>) | |
| |m0|04| 1 method | 02 | 02 | |m0|04| 15min | 023min 55s | FluentAssertions .AssertionExtensions.Should (ExecutionTime) | |
| |m0|05| 1 method | 04 | 04 | |m0|05| 15min | 043min 55s | FluentAssertions .AssertionExtensions.Should(Action ) | |
| |m0|10| 1 method | 03 | 03 | |m0|10| 15min | 033min 55s | FluentAssertions .AssertionExtensions.Should(Func <Task>) | |
| |m0|17| 1 method | 16 | 16 | |m0|17| 15min | 163min 55s | FluentAssertions .AssertionExtensions.Should<T> (Func<Task<T>>) | |
| |m0|16| 1 method | 15 | 15 | |m0|16| 15min | 153min 55s | FluentAssertions .AssertionExtensions.Should<T> (Func<T>) | |
| |m0|19| 1 method | 17 | 17 | |m0|19| 15min | 173min 55s | FluentAssertions .AssertionExtensions.Should<T> (TaskCompletionSource<T>) | |
| |m0|18| 1 method | 19 | 19 | |m0|18| 15min | 193min 55s | FluentAssertions .ExceptionAssertionsExtensions .WithMessage<TException>(Task <ExceptionAssertions<TException>> ,String,String,Object[]) | |
| |m0|15| 1 method | 18 | 18 | |m0|15| 15min | 183min 55s | FluentAssertions .ExceptionAssertionsExtensions .Where<TException>(Task <ExceptionAssertions<TException>> ,Expression<Func<TException ,Boolean>>,String,Object[]) | |
| |m0|12| 1 method | 11 | 11 | |m0|12| 15min | 113min 55s | FluentAssertions .ExceptionAssertionsExtensions .WithInnerException<TException ,TInnerException>(Task <ExceptionAssertions<TException>> ,String,Object[]) | |
| |m0|11| 1 method | 10 | 10 | |m0|11| 15min | 103min 55s | FluentAssertions .ExceptionAssertionsExtensions .WithInnerException<TException> (Task<ExceptionAssertions <TException>>,Type,String,Object[] ) | |
| |m0|14| 1 method | 12 | 12 | |m0|14| 15min | 123min 55s | FluentAssertions .ExceptionAssertionsExtensions .WithInnerExceptionExactly <TException,TInnerException>(Task <ExceptionAssertions<TException>> ,String,Object[]) | |
| |m0|13| 1 method | 14 | 14 | |m0|13| 15min | 143min 55s | FluentAssertions .ExceptionAssertionsExtensions .WithInnerExceptionExactly <TException>(Task <ExceptionAssertions<TException>> ,Type,String,Object[]) | |
| |m4|02| 1 method 1 property | 13 | 13 | |m11|02| 20min | 133min 55s | FluentAssertions .ExceptionAssertionsExtensions .WithParameterName<TException> (ExceptionAssertions<TException> ,String,String,Object[]) |
| Rule Violated: ND1406: Namespaces with poor cohesion (RelationalCohesion) |
• How to Fix Issues of this Rule: Matches of this present rule might reveal either namespaces with specific coding constraints (like code generated that have particular structure) either issues in design. In the second case, refactoring sessions can be planned to increase the overall design and code maintainability. You can get an overview of class coupling for a matched namespace by exporting the ChildTypes to the graph. (Right click the ChildTypes cells) The severity of issues of this rule is Low because the code metric Relational Cohesion is an information about the code structure state but is not actionable, it doesn't tell precisely what to do obtain a better score. Fixing actionable issues of others Architecture and Code Smells default rules will necessarily increase the Relational Cohesion scores.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1406:NamespacesWithPoorRelationalCohesion", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 namespace matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 namespace | ChildTypes | relationalCohesion | Debt | Severity | Full Name |
|---|---|---|---|---|---|
| |m0|0| First 5 of 24 types
| |m0|0| 0.42 | |m0|0| 10min | 0Low | FluentAssertions.Equivalency.Steps |
| Rule Violated: ND1401: Avoid namespaces dependency cycles |
• How to Fix Issues of this Rule: Removing first pairs of mutually dependent namespaces will eliminate most namespaces dependency cycles. This is why it is recommended to focus first on matches of the default rule Avoid namespaces mutually dependent before attempting to fix issues of the present rule. Once all mutually dependent namespaces occurrences are solved, remaining cycles matched by the present rule necessarily involve 3 or more namespaces like in: A is using B is using C is using A. To browse a cycle on the dependency graph or the dependency matrix, right click a cycle cell in the result of the present rule and export the matched namespaces to the dependency graph or matrix. This is illustrated here: https://www.ndepend.com/docs/visual-studio-dependency-graph#Entangled With such a cycle graph visualized, you can determine which dependencies should be discarded to break the cycle. To do so, you need to identify which namespace should be at low-level and which one should be at high-level. In the A is using B is using C is using A cycle example, if A should be at low level then C should be at a higher-level than A. As a consequence C shouldn't use A and this dependency should be removed. To remove a dependency you can refer to patterns described in the HowToFix section of the rule Avoid namespaces mutually dependent. Notice that the dependency matrix can also help visualizing and breaking cycles. In the matrix cycles are represented with red squares and black cells. To easily browse dependency cycles, the dependency matrix comes with an option: Display Direct and Indirect Dependencies. See related documentation here: https://www.ndepend.com/docs/dependency-structure-matrix-dsm#Cycle https://www.ndepend.com/docs/dependency-structure-matrix-dsm#Mutual The estimated Debt, which means the effort to fix such issue, doesn't depend on the cycle length. First because fixing the rule Avoid namespaces mutually dependent will fix most cycle reported here, second because even a long cycle can be broken by removing a single or a few dependencies.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1401:AvoidNamespacesDependencyCycles", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 namespace matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 namespace | cycle | Debt | Severity | Full Name |
|---|---|---|---|---|
| |m0|0| First 5 of 21 namespaces | |m0|0| 2h 0min | 0High | FluentAssertions |
| Code Coverage 550 |
| Rule Violated: ND1608: Types 100% covered should be tagged with FullCoveredAttribute |
• How to Fix Issues of this Rule: Just tag types 100% covered by tests with the FullCoveredAttribute class that can be found in NDepend.API.dll, or by an attribute of yours with this name defined in any namespace in your own code.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1608:Types100PercentCoveredShouldBeTaggedWithFullCoveredAttribute", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
172 types matched
- The following list of types is truncated and contains only the first 20 types of the 172 types matched.
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 172 types | # lines of code (LOC) | Debt | Severity | Full Name |
|---|---|---|---|---|
| |m4|03| 10 | |m0|06| 3min 0s | 06Low | FluentAssertions .AggregateExceptionExtractor | |
| |m3|04| 9 | |m0|05| 3min 0s | 05Low | FluentAssertions.AssertionOptions | |
| |m3|06| 8 | |m0|07| 3min 0s | 07Low | FluentAssertions .AsyncAssertionsExtensions | |
| |m1|09| 4 | |m0|09| 3min 0s | 09Low | FluentAssertions.AtLeast | |
| |m0|12| 3 | |m0|08| 3min 0s | 08Low | FluentAssertions .AtLeast+AtLeastTimesConstraint | |
| |m1|08| 4 | |m0|01| 3min 0s | 01Low | FluentAssertions.AtMost | |
| |m0|13| 3 | |m0|00| 3min 0s | 00Low | FluentAssertions .AtMost+AtMostTimesConstraint | |
| |m4|02| 11 | |m0|02| 3min 0s | 02Low | FluentAssertions .CallerIdentifier+StackFrameRefere nce | |
| |m0|18| 3 | |m0|04| 3min 0s | 04Low | FluentAssertions.Disposable | |
| |m1|11| 4 | |m0|03| 3min 0s | 03Low | FluentAssertions.Exactly | |
| |m0|16| 3 | |m0|16| 3min 0s | 16Low | FluentAssertions .Exactly+ExactlyTimesConstraint | |
| |m3|05| 9 | |m0|15| 3min 0s | 15Low | FluentAssertions .ExceptionAssertionsExtensions | |
| |m0|14| 3 | |m0|17| 3min 0s | 17Low | FluentAssertions.LessThan | |
| |m0|15| 3 | |m0|19| 3min 0s | 19Low | FluentAssertions .LessThan+LessThanTimesConstraint | |
| |m1|10| 4 | |m0|18| 3min 0s | 18Low | FluentAssertions.MoreThan | |
| |m0|17| 3 | |m0|11| 3min 0s | 11Low | FluentAssertions .MoreThan+MoreThanTimesConstraint | |
| |m2|07| 6 | |m0|10| 3min 0s | 10Low | FluentAssertions .OccurrenceConstraint | |
| |m6|01| 15 | |m0|12| 3min 0s | 12Low | FluentAssertions .TypeEnumerableExtensions | |
| |m0|19| 1 | |m0|14| 3min 0s | 14Low | FluentAssertions.Types.AllTypes | |
| |m8|00| 19 | |m0|13| 3min 0s | 13Low | FluentAssertions.Specialized .ExceptionAssertions<TException >+ExceptionMessageAssertion |
| Rule Violated: ND1600: Code should be tested |
• How to Fix Issues of this Rule: Write unit tests to test and cover the methods and their parent types matched by this rule.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1600:CodeShouldBeTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
120 members matched
- The following list of members is truncated and contains only the first 20 members of the 120 members matched.
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 120 types and methods | Percentage Coverage | # lines of code (LOC) | # lines of code not covered | Cyclomatic Complexity (CC) | Debt | Annual Interest | Full Name |
|---|---|---|---|---|---|---|---|
| |c80|06| 80% | |m42|03| 15 | |m50|07| 3 | |m31|03| 6 | |m59|04| 19min | 008min | FluentAssertions.Common.Services .ExecuteCustomInitializers() | |
| |c0|18| 0% | |m6|15| 3 | |m50|04| 3 | |m18|08| 4 | |m22|07| 8min | 018min | FluentAssertions.Execution .DefaultAssertionStrategy | |
| |c61|11| 61.54% | |m36|05| 13 | |m100|00| 5 | |m37|02| 7 | |m87|01| 26min | 027min | FluentAssertions.Common .CSharpAccessModifierExtensions .GetCSharpAccessModifier(FieldInfo ) | |
| |c81|04| 81.25% | |m45|02| 16 | |m50|05| 3 | |m12|10| 3 | |m29|05| 10min | 037min | FluentAssertions.Common .DictionaryHelpers.TryGetValue <TCollection,TKey,TValue> (TCollection,TKey,TValue&) | |
| |c50|12| 50% | |m21|09| 8 | |m75|02| 4 | |m18|07| 4 | |m71|02| 22min | 046min | FluentAssertions.Equivalency.Steps .EnumerableEquivalencyValidator .Execute<T>(Object[],T[]) | |
| |c80|05| 80% | |m27|07| 10 | |m25|09| 2 | |m6|11| 2 | |m11|13| 5min | 055min | FluentAssertions.Specialized .ExecutionTime..ctor(Func<Task> ,String,StartTimer) | |
| |c83|03| 83.33% | |m33|06| 12 | |m25|08| 2 | |m18|09| 4 | |m17|09| 7min | 064min 27s | FluentAssertions.Formatting .Formatter.ToString(Object ,FormattingOptions) | |
| |c50|14| 50% | |m9|14| 4 | |m25|12| 2 | |m6|17| 2 | |m15|11| 6min | 074min 24s | FluentAssertions.Events .EventHandlerFactory .DelegateInvokeMethod(Type) | |
| |c0|17| 0% | |m3|17| 2 | |m25|14| 2 | |m6|18| 2 | |m8|16| 4min 35s | 084min 0s | System.Text .StringBuilderExtensions | |
| |c62|10| 62.5% | |m21|08| 8 | |m50|03| 3 | |m6|12| 2 | |m18|08| 7min | 093min 54s | FluentAssertions.CallerIdentifier .OnlyOneFluentAssertionScopeOnCall Stack() | |
| |c0|19| 0% | |m0|19| 1 | |m0|17| 1 | |m0|19| 1 | |m0|19| 2min 31s | 103min 54s | FluentAssertions.Formatting .FormattedObjectGraph+PossibleMult ilineFragment..ctor (FormattedObjectGraph+PossibleMult ilineFragment) | |
| |c50|13| 50% | |m3|18| 2 | |m0|19| 1 | |m6|15| 2 | |m3|17| 3min 21s | 113min 46s | FluentAssertions.Execution .TestFrameworkProvider.Throw (String) | |
| |c97|00| 97.06% | |m100|00| 34 | |m0|15| 1 | |m68|01| 12 | |m14|12| 6min | 123min 42s | FluentAssertions.Common .ExpressionExtensions .GetMemberPath<TDeclaringType ,TPropertyType>(Expression<Func <TDeclaringType,TPropertyType>>) | |
| |c50|15| 50% | |m9|13| 4 | |m25|13| 2 | |m6|13| 2 | |m15|10| 6min | 133min 21s | FluentAssertions.Events .EventHandlerFactory .TypeIsDelegate(Type) | |
| |c83|02| 83.33% | |m51|01| 18 | |m50|06| 3 | |m100|00| 17 | |m60|03| 19min | 142min 58s | FluentAssertions.Equivalency .EqualityStrategyProvider .GetEqualityStrategy(Type) | |
| |c66|09| 66.67% | |m6|16| 3 | |m0|18| 1 | |m6|14| 2 | |m2|18| 2min 59s | 152min 56s | FluentAssertions.Common.Iterator<T >.get_Current() | |
| |c75|08| 75% | |m21|10| 8 | |m25|11| 2 | |m6|16| 2 | |m9|14| 5min | 162min 44s | FluentAssertions .ObjectAssertionsExtensions .BeDataContractSerializable<T> (ObjectAssertions,Func <EquivalencyOptions<T> ,EquivalencyOptions<T>>,String ,Object[]) | |
| |c28|16| 28.57% | |m18|11| 7 | |m100|01| 5 | |m18|06| 4 | |m100|00| 30min | 172min 44s | FluentAssertions.Common .FullFrameworkReflector .GetExportedTypes(Assembly) | |
| |c86|01| 86.67% | |m42|04| 15 | |m25|10| 2 | |m31|04| 6 | |m29|06| 10min | 182min 36s | FluentAssertions.Types .TypeSelector .UnwrapEnumerableTypes() | |
| |c80|07| 80% | |m12|12| 5 | |m0|16| 1 | |m25|05| 5 | |m8|15| 4min 38s | 192min 23s | FluentAssertions.Xml.Equivalency .XmlReaderValidator.Validate (Boolean) |
| Rule Violated: ND1604: Types almost 100% tested should be 100% tested |
• How to Fix Issues of this Rule: Write more unit-tests dedicated to cover code not covered yet. If you find some hard-to-test code, it is certainly a sign that this code is not well designed and hence, needs refactoring.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1604:TypesAlmost100PercentTestedShouldBe100PercentTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
21 types matched
- The following list of types is truncated and contains only the first 20 types of the 21 types matched.
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 21 types | Percentage Coverage | # lines of code (LOC) | # lines of code not covered | methodsCulprit | Debt | Severity | Full Name |
|---|---|---|---|---|---|---|---|
| |c98|01| 98.57% | |m100|00| 279 | |m100|00| 4 | |m100|02| 2 methods | |m100|00| 4min 50s | 06High | FluentAssertions .NumericAssertionsExtensions | |
| |c98|04| 98.37% | |m39|01| 123 | |m33|04| 2 | |m100|01| 2 methods | |m33|04| 2min 56s | 05High | FluentAssertions.Execution .AssertionScope | |
| |c97|11| 97.12% | |m32|02| 104 | |m66|01| 3 | |m100|00| 2 methods | |m66|01| 3min 53s | 07High | FluentAssertions.Types .TypeSelector | |
| |c98|00| 98.77% | |m23|03| 81 | |m0|08| 1 | |m50|07| 1 method | |m0|08| 2min 0s | 09High | FluentAssertions.Xml.Equivalency .XmlReaderValidator | |
| |c98|02| 98.46% | |m17|04| 65 | |m0|09| 1 | |m50|08| 1 method | |m0|09| 2min 0s | 08High | FluentAssertions.Types .MethodInfoSelector | |
| |c98|03| 98.44% | |m16|05| 64 | |m0|06| 1 | |m50|09| 1 method | |m0|06| 2min 0s | 01High | FluentAssertions.Common .ExpressionExtensions | |
| |c96|15| 96.77% | |m15|06| 62 | |m33|03| 2 | |m50|06| 1 method | |m33|03| 2min 56s | 00High | FluentAssertions.Common .TypeMemberReflector | |
| |c96|16| 96.3% | |m12|07| 54 | |m33|02| 2 | |m50|03| 1 method | |m33|02| 2min 56s | 02High | FluentAssertions .EventRaisingExtensions | |
| |c98|05| 98.04% | |m11|08| 51 | |m0|05| 1 | |m50|04| 1 method | |m0|05| 2min 0s | 04High | FluentAssertions.Types .PropertyInfoSelector | |
| |c97|06| 97.73% | |m8|09| 44 | |m0|07| 1 | |m50|05| 1 method | |m0|07| 2min 0s | 03High | FluentAssertions.Formatting .DefaultValueFormatter | |
| |c97|07| 97.56% | |m7|10| 41 | |m0|17| 1 | |m50|16| 1 method | |m0|17| 2min 0s | 16High | FluentAssertions.Common .StringExtensions | |
| |c97|09| 97.5% | |m7|12| 40 | |m0|16| 1 | |m50|15| 1 method | |m0|16| 2min 0s | 15High | FluentAssertions.Types .AssemblyAssertions | |
| |c97|08| 97.5% | |m7|11| 40 | |m0|19| 1 | |m50|18| 1 method | |m0|19| 2min 0s | 17High | FluentAssertions.Execution .MessageBuilder | |
| |c97|10| 97.14% | |m5|13| 35 | |m0|18| 1 | |m50|17| 1 method | |m0|18| 2min 0s | 19High | FluentAssertions.Equivalency.Steps .EnumEqualityStep | |
| |c97|12| 97.06% | |m5|14| 34 | |m0|15| 1 | |m50|14| 1 method | |m0|15| 2min 0s | 18High | FluentAssertions.Equivalency .EquivalencyValidator | |
| |c96|13| 96.97% | |m4|16| 33 | |m0|12| 1 | |m50|11| 1 method | |m0|12| 2min 0s | 11High | FluentAssertions.Specialized .NonGenericAsyncFunctionAssertions | |
| |c96|14| 96.97% | |m4|15| 33 | |m0|11| 1 | |m50|10| 1 method | |m0|11| 2min 0s | 10High | FluentAssertions.Equivalency.Steps .GenericEnumerableEquivalencyStep | |
| |c95|19| 95.45% | |m0|19| 22 | |m0|14| 1 | |m50|13| 1 method | |m0|14| 2min 0s | 12High | FluentAssertions.EquivalencyPlan | |
| |c95|18| 95.45% | |m0|18| 22 | |m0|13| 1 | |m50|12| 1 method | |m0|13| 2min 0s | 14High | FluentAssertions.Execution .TestFrameworkProvider | |
| |c95|17| 95.45% | |m0|17| 22 | |m0|10| 1 | 19no method | |m0|10| 2min 0s | 13High | FluentAssertions.Equivalency .EquivalencyOptions<TExpectation> |
| Rule Violated: ND1605: Namespaces almost 100% tested should be 100% tested |
• How to Fix Issues of this Rule: Write more unit-tests dedicated to cover code not covered yet in the namespace. If you find some hard-to-test code, it is certainly a sign that this code is not well designed and hence, needs refactoring.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1605:NamespacesAlmost100PercentTestedShouldBe100PercentTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
10 namespaces matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| Rule Violated: ND1603: Assemblies and Namespaces should be tested |
• How to Fix Issues of this Rule: Write unit and integration tests to cover, even partially, code elements matched by this rule. Then use issues of the rules Code should be tested, New Types and Methods should be tested and Methods refactored should be tested to write more tests where it matters most, and eventually refactor some code to make it more testable.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1603:AssembliesNamespacesAndTypesShouldBeTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 namespace matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 namespace | # lines of code not covered | Debt | Severity | Full Name |
|---|---|---|---|---|
| |m0|0| 2 | |m0|0| 4min 0s | 0Low | System.Text |
| Dead Code 310 |
|
| Rule Violated: ND1701: Potentially Dead Methods |
• How to Fix Issues of this Rule: Static analysis cannot provide an exact list of dead methods, because there are several ways to invoke a method dynamically (like through reflection). For each method matched by this query, first investigate if the method is invoked somehow (like through reflection). If the method is really never invoked, it is important to remove it to avoid maintaining useless code. If you estimate the code of the method might be used in the future, at least comment it, and provide an explanatory comment about the future intentions. If a method is invoked somehow, but still is matched by this rule, you can tag it with the attribute IsNotDeadCodeAttribute found in NDepend.API.dll to avoid matching the method again. You can also provide your own attribute for this need, but then you'll need to adapt this code rule. Issues of this rule have a Debt equal to 10 minutes because it only takes a short while to investigate if a method can be safely discarded. On top of these 10 minutes, the depth of usage of such method adds up 3 minutes per unity because dead method only called by dead code takes a bit more time to be investigated. The Annual Interest of issues of this rule, the annual cost to not fix such issue, is proportional to the type #lines of code, because the bigger the method is, the more it slows down maintenance.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1701:PotentiallyDeadMethods", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
4 methods matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 4 methods | depth | MethodsCallingMe | Debt | Annual Interest | Full Name |
|---|---|---|---|---|---|
| |m0|1| 0 | 1no method | |m0|1| 10min | 19min | System.Text .StringBuilderExtensions .AppendJoin<T>(StringBuilder ,String,IEnumerable<T>) | |
| |m0|0| 0 | 0no method | |m0|0| 10min | 013min | FluentAssertions.Formatting .FormattedObjectGraph+PossibleMult ilineFragment .AddEndingLineOrFragment(String) | |
| |m0|3| 0 | 3no method | |m0|3| 10min | 39min | FluentAssertions.Execution .AssertionScope.set_Current (AssertionScope) | |
| |m0|2| 0 | 2no method | |m0|2| 10min | 29min | FluentAssertions.Common .StringExtensions .UnescapePlaceholders(String) |
| Visibility 550 |
| Rule Violated: ND1807: Avoid public methods not publicly visible |
• How to Fix Issues of this Rule: Declare the method as internal if it is used outside of its type, else declare it as private.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1807:AvoidPublicMethodsNotPubliclyVisible", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
261 methods matched
- The following list of methods is truncated and contains only the first 20 methods of the 261 methods matched.
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 261 methods | parentTypeVisibility | declareMethodAs | methodsCaller | Debt | Severity | Full Name |
|---|---|---|---|---|---|---|
| 06declared as *internal* | 07internal | |m0|14| 1 method | |m0|06| 0min 30s | 06Low | System.Text .StringBuilderExtensions .AppendLine(StringBuilder ,IFormatProvider,String) | |
| 05declared as *private* | 06internal | |m0|15| 1 method | |m0|05| 0min 30s | 05Low | FluentAssertions .CallerIdentifier+StackFrameRefere nce.get_SkipStackFrameCount() | |
| 07declared as *internal* | 08internal | |m1|04| 3 methods | |m0|07| 0min 30s | 07Low | FluentAssertions.Disposable..ctor (Action) | |
| 09declared as *private* | 10internal | |m0|16| 1 method | |m0|09| 0min 30s | 09Low | FluentAssertions.Specialized .ExceptionAssertions<TException >+ExceptionMessageAssertion .Execute(IEnumerable<String> ,String,String,Object[]) | |
| 08declared as *internal* | 09internal | |m0|08| 2 methods | |m0|08| 0min 30s | 08Low | FluentAssertions.Primitives .NegatedStringStartStrategy..ctor (StringComparison) | |
| 01declared as *internal* | 03internal | |m0|06| 2 methods | |m0|01| 0min 30s | 01Low | FluentAssertions.Primitives .StringEqualityStrategy..ctor (StringComparison) | |
| 00declared as *internal* | 04internal | |m0|07| 2 methods | |m0|00| 0min 30s | 00Low | FluentAssertions.Primitives .StringStartStrategy..ctor (StringComparison) | |
| 02declared as *internal* | 05internal | |m8|01| First 5 of 10 methods
| |m0|02| 0min 30s | 02Low | FluentAssertions.Primitives .StringValidator..ctor (IStringComparisonStrategy,String ,Object[]) | |
| 04declared as *internal* | 11internal | |m8|00| First 5 of 10 methods
| |m0|04| 0min 30s | 04Low | FluentAssertions.Primitives .StringValidator.Validate(String ,String) | |
| 03declared as *internal* | 02private | |m0|11| 2 methods | |m0|03| 0min 30s | 03Low | FluentAssertions.Primitives .StringWildcardMatchingStrategy .get_Negate() | |
| 16declared as *internal* | 16internal | |m0|05| 2 methods | |m0|16| 0min 30s | 16Low | FluentAssertions.Primitives .StringWildcardMatchingStrategy .set_Negate(Boolean) | |
| 15declared as *internal* | 00private | |m0|13| 2 methods | |m0|15| 0min 30s | 15Low | FluentAssertions.Primitives .StringWildcardMatchingStrategy .get_IgnoreCase() | |
| 17declared as *internal* | 19internal | |m0|12| 2 methods | |m0|17| 0min 30s | 17Low | FluentAssertions.Primitives .StringWildcardMatchingStrategy .set_IgnoreCase(Boolean) | |
| 19declared as *internal* | 01private | |m0|18| 1 method | |m0|19| 0min 30s | 19Low | FluentAssertions.Primitives .StringWildcardMatchingStrategy .get_IgnoreNewLineDifferences() | |
| 18declared as *internal* | 18internal | |m0|09| 2 methods | |m0|18| 0min 30s | 18Low | FluentAssertions.Primitives .StringWildcardMatchingStrategy .set_IgnoreNewLineDifferences (Boolean) | |
| 11declared as *internal* | 13internal | |m2|02| 4 methods
| |m0|11| 0min 30s | 11Low | FluentAssertions.Primitives .TimeSpanPredicate.get_DisplayText () | |
| 10declared as *internal* | 12internal | |m0|10| 2 methods | |m0|10| 0min 30s | 10Low | FluentAssertions.Primitives .TimeSpanPredicate..ctor(Func <TimeSpan,TimeSpan,Boolean>,String ) | |
| 12declared as *internal* | 15internal | |m2|03| 4 methods
| |m0|12| 0min 30s | 12Low | FluentAssertions.Primitives .TimeSpanPredicate.IsMatchedBy (TimeSpan,TimeSpan) | |
| 14declared as *internal* | 14internal | |m0|17| 1 method | |m0|14| 0min 30s | 14Low | FluentAssertions.Formatting .FormattedObjectGraph+PossibleMult ilineFragment..ctor (FormattedObjectGraph) | |
| 13declared as *internal* | 17internal | |m0|19| 1 method | |m0|13| 0min 30s | 13Low | FluentAssertions.Formatting .FormattedObjectGraph+PossibleMult ilineFragment .InsertLineOrFragment (String) |
| Rule Violated: ND1803: Types that could be declared as private, nested in a parent type |
• How to Fix Issues of this Rule: Nest each matched type into the specified parent type and declare it as private. However nested private types are hardly testable. Hence this rule might not be applied to types consumed directly by tests.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1803:TypesThatCouldBeDeclaredAsPrivateNestedInAParentType", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
35 types matched
- The following list of types is truncated and contains only the first 20 types of the 35 types matched.
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 35 types | couldBeNestedIn | Debt | Severity | Full Name |
|---|---|---|---|---|
| 06 | |m0|06| 3min 0s | 06Low | FluentAssertions.Specialized .FunctionAssertionHelpers | |
| 05 | |m0|05| 3min 0s | 05Low | FluentAssertions.Primitives .NegatedStringStartStrategy | |
| 07 | |m0|07| 3min 0s | 07Low | FluentAssertions.Primitives .StringEqualityStrategy | |
| 09 | |m0|09| 3min 0s | 09Low | FluentAssertions.Primitives .StringStartStrategy | |
| 08 | |m0|08| 3min 0s | 08Low | FluentAssertions.Primitives .StringValidator | |
| 01 | |m0|01| 3min 0s | 01Low | FluentAssertions.Primitives .StringWildcardMatchingStrategy | |
| 00 | |m0|00| 3min 0s | 00Low | FluentAssertions.Execution .CollectingAssertionStrategy | |
| 02 | |m0|02| 3min 0s | 02Low | FluentAssertions.Execution .DefaultAssertionStrategy | |
| 04 | |m0|04| 3min 0s | 04Low | FluentAssertions.Execution .FallbackTestFramework | |
| 03 | |m0|03| 3min 0s | 03Low | FluentAssertions.Execution .MessageBuilder | |
| 16 | |m0|16| 3min 0s | 16Low | FluentAssertions.Execution .MSpecFramework | |
| 15 | |m0|15| 3min 0s | 15Low | FluentAssertions.Execution .MSTestFrameworkV2 | |
| 17 | |m0|17| 3min 0s | 17Low | FluentAssertions.Execution .NUnitTestFramework | |
| 19 | |m0|19| 3min 0s | 19Low | FluentAssertions.Execution .XUnit2TestFramework | |
| 18 | |m0|18| 3min 0s | 18Low | FluentAssertions.Events .EventHandlerFactory | |
| 11 | |m0|11| 3min 0s | 11Low | FluentAssertions.Common .FullFrameworkReflector | |
| 10 | |m0|10| 3min 0s | 10Low | FluentAssertions.Common .MemberPathSegmentEqualityComparer | |
| 12 | |m0|12| 3min 0s | 12Low | FluentAssertions.Common .NullConfigurationStore | |
| 14 | |m0|14| 3min 0s | 14Low | FluentAssertions.Common .TypeMemberReflector | |
| 13 | |m0|13| 3min 0s | 13Low | FluentAssertions .CallerIdentification .AddNonEmptySymbolParsingStrategy |
| Rule Violated: ND1800: Methods that could have a lower visibility |
• How to Fix Issues of this Rule: Declare each matched method with the specified optimal visibility in the CouldBeDeclared rule result column. By default, this rule matches public methods. If you are publishing an API many public methods matched should remain public. In such situation, you can opt for the coarse solution to this problem by adding in the rule source code && !m.IsPubliclyVisible or you can prefer the finer solution by tagging each concerned method with CannotDecreaseVisibilityAttribute.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1800:MethodsThatCouldHaveALowerVisibility", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
14 methods matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 14 methods | Visibility | CouldBeDeclared | MethodsCallingMe | Debt | Severity | Full Name |
|---|---|---|---|---|---|---|
| 01private protected | 04private | |m0|07| 1 method | |m0|04| 0min 30s | 04Medium | FluentAssertions.Specialized .TaskCompletionSourceAssertionsBas e.get_Clock() | |
| 05public | 05private | |m100|00| 2 methods | |m0|05| 0min 30s | 05Medium | FluentAssertions.Primitives .StringWildcardMatchingStrategy .get_Negate() | |
| 06public | 06private | |m100|01| 2 methods | |m0|06| 0min 30s | 06Medium | FluentAssertions.Primitives .StringWildcardMatchingStrategy .get_IgnoreCase() | |
| 02public | 03private | |m0|06| 1 method | |m0|03| 0min 30s | 03Medium | FluentAssertions.Primitives .StringWildcardMatchingStrategy .get_IgnoreNewLineDifferences() | |
| 00internal | 00private | |m0|05| 1 method | |m0|00| 0min 30s | 00Medium | FluentAssertions.Execution .AssertionScope.get_Succeeded() | |
| 03public | 01private | |m0|08| 1 method | |m0|01| 0min 30s | 01Medium | FluentAssertions.Execution .GivenSelectorExtensions .AssertEitherCollectionIsNotEmpty <T>(GivenSelector<ICollection<T>> ,Int32) | |
| 04public | 02private | |m100|04| 2 methods | |m0|02| 0min 30s | 02Medium | FluentAssertions.Execution .GivenSelectorExtensions .AssertCollectionHasEnoughItems<T> (GivenSelector<ICollection<T>> ,Int32) | |
| 11public | 11private | |m0|13| 1 method | |m0|11| 0min 30s | 11Medium | FluentAssertions.Execution .GivenSelectorExtensions .AssertCollectionHasNotTooManyItem s<T>(GivenSelector<ICollection<T> > ,Int32) | |
| 12public | 12private | |m0|11| 1 method | |m0|12| 0min 30s | 12Medium | FluentAssertions.Common .TypeExtensions .GetParameterlessMethod(Type ,String) | |
| 13public | 13private | |m0|09| 1 method | |m0|13| 0min 30s | 13Medium | FluentAssertions.Equivalency.Steps .EnumerableEquivalencyValidator .get_Recursive() | |
| 08public | 10private | |m0|10| 1 method | |m0|10| 0min 30s | 10Medium | FluentAssertions.Equivalency.Steps .EnumerableEquivalencyValidator .get_OrderingRules() | |
| 09public | 07private | |m100|02| 2 methods | |m0|07| 0min 30s | 07Medium | FluentAssertions.Equivalency .Ordering.PathBasedOrderingRule .get_Invert() | |
| 10public | 08private | |m100|03| 2 methods | |m0|08| 0min 30s | 08Medium | FluentAssertions.Equivalency .Ordering .PredicateBasedOrderingRule .get_Invert() | |
| 07public | 09private | |m0|12| 1 method | |m0|09| 0min 30s | 09Medium | FluentAssertions.Collections .MaximumMatching.Predicate<TValue> .get_Index() |
| Rule Violated: ND1802: Fields that could have a lower visibility |
• How to Fix Issues of this Rule: Declare each matched field with the specified optimal visibility in the CouldBeDeclared rule result column. By default, this rule matches public fields. If you are publishing an API some public fields matched should remain public. In such situation, you can opt for the coarse solution to this problem by adding in the rule source code && !m.IsPubliclyVisible or you can prefer the finer solution by tagging eah concerned field with CannotDecreaseVisibilityAttribute.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1802:FieldsThatCouldHaveALowerVisibility", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
2 fields matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| Rule Violated: ND1804: Avoid publicly visible constant fields |
• How to Fix Issues of this Rule: Declare matched fields as static readonly instead of constant. This way, the field value is safely changeable without the need to recompile client assemblies.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1804:AvoidPubliclyVisibleConstantFields", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
2 fields matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 2 fields | Debt | Severity | Full Name |
|---|---|---|---|
| |m0|0| 0min 30s | 0Medium | FluentAssertions.Extensions .FluentTimeSpanExtensions .TicksPerMicrosecond | |
| |m0|1| 0min 30s | 1Medium | FluentAssertions.Extensions .FluentTimeSpanExtensions .TicksPerNanosecond |
| Immutability 841 |
|
| Rule Violated: ND1906: Don't assign a field from many methods |
• How to Fix Issues of this Rule: There is no straight advice to refactor the number of methods responsible for assigning a field. Sometime the situation is simple enough, like when a field that hold an indentation state is assigned by many writer methods. Such situation only requires to define two methods IndentPlus()/IndentMinus() that assign the field, called from all writers methods. Sometime the solution involves rethinking and then rewriting a complex algorithm. Such field can sometime become just a variable accessed locally by a method or a closure. Sometime, just rethinking the life-time and the role of the parent object allows the field to become immutable (i.e assigned only by the constructor). The estimated Debt, which means the effort to fix such issue, is equal to 4 minutes plus 5 minutes per method assigning the instance field or 10 minutes per method assigning the static field.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1906:DontAssignAFieldFromManyMethods", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
4 fields matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| Critical Rule Violated: ND1901: Avoid non-readonly static fields |
• How to Fix Issues of this Rule: If the static field is just assigned once in the program lifetime, make sure to declare it as readonly and assign it inline, or from the static constructor. Else if methods other than the static constructor need to assign the state hold by the static field, refactoring must occur to ensure that this state is hold through an instance field.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1901:AvoidNonReadOnlyStaticFields", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
4 fields matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 4 fields | methodAssigningField | Debt | Severity | Full Name |
|---|---|---|---|---|
| |m0|1| 1 method | |m0|1| 10min | 1High | FluentAssertions.AssertionOptions .defaults | |
| |m0|2| 1 method | |m0|2| 10min | 0High | FluentAssertions.Formatting .Formatter.isReentry | |
| |m0|3| 1 method | |m0|3| 10min | 3High | FluentAssertions.Common.Services .configuration | |
| |m100|0| 2 methods | |m100|0| 18min | 2High | FluentAssertions.Common.Services .isInitialized |
| Rule Violated: ND1905: A field must not be assigned from outside its parent hierarchy types |
• How to Fix Issues of this Rule: Matched fields must be declared as protected and even better as private. However, if the field exclusively references immutable states, it can remain accessible from the outside but must be declared as readonly. The estimated Debt, which means the effort to fix such issue, is equal to 5 minutes per method outside the parent hierarchy that assigns the matched field.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1905:AFieldMustNotBeAssignedFromOutsideItsParentHierarchyTypes", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
2 fields matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 2 fields | methodsAssignerOutsideOfMyType | Debt | Severity | Full Name |
|---|---|---|---|---|
| |m0|0| 2 methods
| |m0|0| 10min | 0High | FluentAssertions.Collections .MaximumMatching .MaximumMatchingSolver<TValue >+Match.Predicate | |
| |m0|1| 2 methods
| |m0|1| 10min | 1High | FluentAssertions.Collections .MaximumMatching .MaximumMatchingSolver<TValue >+Match.Element |
| Rule Violated: ND1902: Avoid static fields with a mutable field type |
• How to Fix Issues of this Rule: To fix violations of this rule, make sure to hold mutable states through objects that are passed explicitly everywhere they need to be consumed, in opposition to mutable object hold by a static field that makes it modifiable from a bit everywhere in the program.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1902:AvoidStaticFieldsWithAMutableFieldType", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
2 fields matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 2 fields | mutableFieldType | isFieldImmutable | isFieldReadOnly | Debt | Severity | Full Name |
|---|---|---|---|---|---|---|
| 0 | 0Mutable | 0Not ReadOnly | |m0|0| 10min | 0Medium | FluentAssertions.AssertionOptions .defaults | |
| 1 | 1Mutable | 1Not ReadOnly | |m0|1| 10min | 1Medium | FluentAssertions.Common.Services .configuration |
| Rule Violated: ND1903: Structures should be immutable |
• How to Fix Issues of this Rule: Make sure matched structures are immutable. This way, all automatic copies of an original instance, resulting from being passed by value will hold the same values and there will be no surprises. Note that since C#7.2 you can prefix a structure declaration with the keyword readonly to enforce that it is an immutable structure. If your structure is immutable then if you want to change a value, you have to consciously do it by creating a new instance of the structure with the modified data.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1903:StructuresShouldBeImmutable", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 type matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 type | # lines of code (LOC) | mutableFields | Debt | Severity | Full Name |
|---|---|---|---|---|---|
| |m0|0| 0 | |m0|0| 2 fields | |m0|0| 7min | 0High | FluentAssertions.Collections .MaximumMatching .MaximumMatchingSolver<TValue >+Match |
| Naming Conventions 1551 |
|
| Rule Violated: ND2013: Avoid prefixing type name with parent namespace name |
• How to Fix Issues of this Rule: To fix a violation of this rule, remove the prefix from the type name.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND2013:AvoidPrefixingTypeNameWithParentNamespaceName", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
12 types matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 12 types | namespaceName | Debt | Severity | Full Name |
|---|---|---|---|---|
| 03Formatting | |m0|03| 10min | 03Medium | FluentAssertions.Formatting .FormattingContext | |
| 04Formatting | |m0|04| 10min | 04Medium | FluentAssertions.Formatting .FormattingOptions | |
| 05Xml | |m0|05| 10min | 05Medium | FluentAssertions.Xml .XmlNodeFormatter | |
| 00Equivalency | |m0|00| 10min | 00Medium | FluentAssertions.Equivalency .EquivalencyOptions<TExpectation> | |
| 01Equivalency | |m0|01| 10min | 01Medium | FluentAssertions.Equivalency .EquivalencyOptions | |
| 02Equivalency | |m0|02| 10min | 02Medium | FluentAssertions.Equivalency .EquivalencyResult | |
| 09Equivalency | |m0|09| 10min | 09Medium | FluentAssertions.Equivalency .EquivalencyStep<T> | |
| 10Equivalency | |m0|10| 10min | 10Medium | FluentAssertions.Equivalency .EquivalencyValidationContext | |
| 11Equivalency | |m0|11| 10min | 11Medium | FluentAssertions.Equivalency .EquivalencyValidator | |
| 06MaximumMatching | |m0|06| 10min | 06Medium | FluentAssertions.Collections .MaximumMatching .MaximumMatchingProblem<TValue> | |
| 07MaximumMatching | |m0|07| 10min | 07Medium | FluentAssertions.Collections .MaximumMatching .MaximumMatchingSolution<TValue> | |
| 08MaximumMatching | |m0|08| 10min | 08Medium | FluentAssertions.Collections .MaximumMatching .MaximumMatchingSolver<TValue> |
| Rule Violated: ND2003: Abstract base class should be suffixed with 'Base' |
• How to Fix Issues of this Rule: Suffix the names of matched base classes with Base.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND2003:AbstractBaseClassShouldBeSuffixedWithBase", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
6 types matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 6 types | Debt | Severity | Full Name |
|---|---|---|---|
| |m0|2| 5min | 2Medium | FluentAssertions .OccurrenceConstraint | |
| |m0|1| 5min | 1Medium | FluentAssertions.Primitives .ReferenceTypeAssertions<TSubject ,TAssertions> | |
| |m0|0| 5min | 0Medium | FluentAssertions.Execution .LateBoundTestFramework | |
| |m0|5| 5min | 5Medium | FluentAssertions.Equivalency .EquivalencyStep<T> | |
| |m0|4| 5min | 4Medium | FluentAssertions.Equivalency .SelfReferenceEquivalencyOptions <TSelf> | |
| |m0|3| 5min | 3Medium | FluentAssertions.Equivalency .Selection .SelectMemberByPathSelectionRule |
| Rule Violated: ND2001: Static fields naming convention |
• How to Fix Issues of this Rule: Once the rule has been adapted to your own naming convention make sure to name all matched static fields adequately.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND2001:StaticFieldsNamingConvention", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
4 fields matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 4 fields | Size of instance | Debt | Severity | Full Name |
|---|---|---|---|---|
| 1N/A | |m0|1| 3min 0s | 1Medium | FluentAssertions.AssertionOptions .defaults | |
| 0N/A | |m0|0| 3min 0s | 0Medium | FluentAssertions.Formatting .Formatter.isReentry | |
| 3N/A | |m0|3| 3min 0s | 3Medium | FluentAssertions.Common.Services .configuration | |
| 2N/A | |m0|2| 3min 0s | 2Medium | FluentAssertions.Common.Services .isInitialized |
| Rule Violated: ND2010: Avoid methods with name too long |
• How to Fix Issues of this Rule: To fix a violation of this rule, rename the method with a shortest name that equally conveys the behavior of the method. Or eventually split the method into several smaller methods.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND2010:AvoidMethodsWithNameTooLong", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
2 methods matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 2 methods | SimpleName | NameLength | Debt | Severity | Full Name |
|---|---|---|---|---|---|
| 0AppendPrefixAndEscapedPhraseToShowWithEllipsisAndSuffix | |m100|0| 55 | |m0|0| 3min 0s | 0Medium | FluentAssertions.Primitives .StringEqualityStrategy .AppendPrefixAndEscapedPhraseToSho wWithEllipsisAndSuffix (StringBuilder,String,String,Int32 ,String) | |
| 1GetStartIndexOfPhraseToShowBeforeTheMismatchingIndex | |m0|1| 52 | |m0|1| 3min 0s | 1Medium | FluentAssertions.Primitives .StringEqualityStrategy .GetStartIndexOfPhraseToShowBefore TheMismatchingIndex(String,Int32) |
| Rule Violated: ND2016: Methods prefixed with 'Try' should return a boolean |
• How to Fix Issues of this Rule: To fix a violation of this rule, Rename the method, or transform it into an operation that can fail.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND2016:MethodsPrefixedWithTryShouldReturnABoolean", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 method matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 method | ReturnType | Debt | Severity | Full Name |
|---|---|---|---|---|
| 0 | |m0|0| 10min | 0Medium | FluentAssertions.Equivalency .EquivalencyValidator .TryToProveNodesAreEquivalent (Comparands ,IEquivalencyValidationContext) |
| Critical Rule Violated: ND2012: Avoid having different types with same name |
• How to Fix Issues of this Rule: To fix a violation of this rule, rename concerned types.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND2012:AvoidHavingDifferentTypesWithSameName", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 type matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 type | types | namespaces | Debt | Severity | Full Name |
|---|---|---|---|---|---|
| |m0|0| 2 types | |m0|0| 1 namespace | |m0|0| 10min | 0High | FluentAssertions.Equivalency.Node |
| Source Files Organization 420 |
| Rule Violated: ND2102: Avoid defining multiple types in a source file |
• How to Fix Issues of this Rule: To fix a violation of this rule, create a source file for each type. By default issues of this rule have a Low severity because they reflect more an advice than a problem.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND2102:AvoidDefiningMultipleTypesInASourceFile", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
5 types matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 5 types | TypesInSourceFile | SourceFilePathString | SourceFileNameString | Debt | Severity | Full Name |
|---|---|---|---|---|---|---|
| |m0|2| 2 types | 1 | 1EnumAssertions.cs | |m0|1| 3min 0s | 1Low | FluentAssertions.Primitives .EnumAssertions<TEnum> | |
| |m0|1| 2 types | 0 | 0NullableEnumAssertions.cs | |m0|0| 3min 0s | 0Low | FluentAssertions.Primitives .NullableEnumAssertions<TEnum> | |
| |m0|4| 2 types | 2 | 2ObjectAssertions.cs | |m0|2| 3min 0s | 2Low | FluentAssertions.Primitives .ObjectAssertions | |
| |m0|3| 2 types | 4 | 4EquivalencyOptions.cs | |m0|4| 3min 0s | 4Low | FluentAssertions.Equivalency .EquivalencyOptions<TExpectation> | |
| |m100|0| 3 types | 3 | 3StringCollectionAssertions.cs | |m0|3| 3min 0s | 3Low | FluentAssertions.Collections .StringCollectionAssertions |
| Rule Violated: ND2103: Namespace name should correspond to file location |
• How to Fix Issues of this Rule: To fix a violation of this rule, make sure that the namespace and the directory sub-paths that contains the source filed, are aligned.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND2103:NamespaceNameShouldCorrespondToFileLocation", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 namespace matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 namespace | dirShouldContain | dir | justACaseSensitiveIssueStr | typesConcerned | Debt | Severity | Full Name |
|---|---|---|---|---|---|---|---|
| 0 Text | 0 | 0{empty string} | |m0|0| 1 type | |m0|0| 3min 0s | 0Medium | System.Text |
.NET Framework Usage 2410 |
| System 910 |
|
| Rule Violated: ND2209: Uri fields or properties should be of type System.Uri |
• How to Fix Issues of this Rule: Rename the field or property, or change the field or property type to System.Uri. By default issues of this rule have a Low severity because they reflect more an advice than a problem.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND2209:UriFieldsShouldBeOfTypeSystemUri", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
2 properties matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 2 properties | type | Debt | Severity | Full Name |
|---|---|---|---|---|
| 0 | |m0|0| 5min | 0Low | FluentAssertions.Xml.Equivalency .AttributeData.NamespaceUri | |
| 1 | |m0|1| 5min | 1Low | FluentAssertions.Xml.Equivalency .XmlIterator.NamespaceUri |
Hot Spots
| Code Query: Types Hot Spots |
161 types matched
| 161 types | Debt | Issues | Annual Interest | Breaking Point | # lines of code (LOC) | DebtRating | DebtRatio | Full Name |
|---|---|---|---|---|---|---|---|---|
| |m100|00| 6h 27min | |m28|02| First 5 of 16 issues
| |m100|00| 2h 25min | |m29|08| 2y 242d | |m75|01| 211 | 09C | |m7|14| 14.15 | FluentAssertions.Equivalency .SelfReferenceEquivalencyOptions <TSelf> | |
| |m81|01| 5h 18min | |m30|01| First 5 of 17 issues
| |m27|13| 41min | |m90|00| 7y 235d | |m5|17| 15 | 01E | |m69|00| 118.73 | FluentAssertions .TypeEnumerableExtensions | |
| |m55|02| 3h 36min | |m100|00| First 5 of 54 issues
| |m32|12| 49min | |m51|05| 4y 150d | |m39|03| 109 | 07C | |m8|12| 14.6 | FluentAssertions.Common .TypeExtensions | |
| |m52|03| 3h 25min | |m13|10| First 5 of 8 issues
| |m25|14| 39min | |m61|03| 5y 86d | |m100|00| 279 | 19B | |m3|19| 7.42 | FluentAssertions .NumericAssertionsExtensions | |
| |m52|04| 3h 22min | |m16|08| First 5 of 10 issues
| |m57|08| 1h 24min | |m26|09| 2y 143d | |m44|02| 123 | 08C | |m6|15| 12.3 | FluentAssertions.Execution .AssertionScope | |
| |m41|05| 2h 42min | |m22|06| First 5 of 13 issues
| |m67|07| 1h 39min | |m17|12| 1y 231d | |m7|14| 22 | 02E | |m31|02| 53.67 | FluentAssertions.Equivalency .EquivalencyOptions<TExpectation> | |
| |m32|06| 2h 8min | |m15|09| First 5 of 9 issues
| |m20|15| 31min | |m47|07| 4y 31d | |m3|18| 9 | 00E | |m48|01| 82.3 | FluentAssertions .ExceptionAssertionsExtensions | |
| |m29|07| 1h 56min | |m7|15| 5 issues
| |m35|10| 53min | |m23|11| 2y 68d | |m37|04| 104 | 18B | |m5|18| 9.75 | FluentAssertions.Types .TypeSelector | |
| |m29|08| 1h 54min | |m26|04| First 5 of 15 issues
| |m17|16| 27min | |m48|06| 4y 64d | |m32|05| 90 | 06C | |m6|16| 11.73 | FluentAssertions.Equivalency.Steps .EnumerableEquivalencyValidator | |
| |m28|09| 1h 50min | |m22|07| First 5 of 13 issues
| |m33|11| 50min | |m23|10| 2y 69d | |m22|06| 62 | 10C | |m8|11| 14.69 | FluentAssertions.Common .TypeMemberReflector | |
| |m24|10| 1h 38min | |m13|11| First 5 of 8 issues
| |m89|03| 2h 10min | |m6|14| 273d | |m13|09| 37 | 16C | |m10|07| 18.91 | FluentAssertions.Common.Services | |
| |m22|11| 1h 28min | |m5|17| 4 issues
| |m88|04| 2h 8min | |m5|15| 249d | |m20|07| 58 | 15C | |m8|13| 14.55 | FluentAssertions.Equivalency.Steps .GenericDictionaryEquivalencyStep | |
| |m20|12| 1h 22min | |m7|16| 5 issues
| |m9|17| 15min | |m60|04| 5y 66d | |m9|13| 26 | 03D | |m17|04| 29.89 | FluentAssertions .ObjectAssertionsExtensions | |
| |m19|13| 1h 16min | |m7|14| 5 issues
| |m98|01| 2h 24min | |m3|17| 192d | |m3|19| 9 | 05D | |m25|03| 43.98 | FluentAssertions.AssertionOptions | |
| |m18|14| 1h 11min | |m9|12| First 5 of 6 issues
| |m73|06| 1h 47min | |m5|16| 243d | |m12|10| 34 | 17C | |m11|06| 19.83 | FluentAssertions.Equivalency .EquivalencyValidator | |
| |m17|15| 1h 9min | |m9|13| First 5 of 6 issues
| |m36|09| 54min | |m12|13| 1y 101d | |m7|15| 21 | 12C | |m9|08| 16.04 | FluentAssertions.Equivalency .EquivalencyValidationContext | |
| |m17|16| 1h 9min | |m26|05| First 5 of 15 issues
| |m6|18| 11min | |m70|01| 6y 19d | |m9|12| 27 | 11C | |m8|09| 15.36 | FluentAssertions.Common.MemberPath | |
| |m14|17| 58min | |m3|18| 3 issues
| |m6|19| 10min | |m62|02| 5y 126d | |m6|16| 19 | 04D | |m14|05| 25.94 | FluentAssertions.Equivalency.Steps .DictionaryEquivalencyStep | |
| |m14|18| 57min | |m3|19| 3 issues
| |m97|02| 2h 22min | |m2|19| 147d | |m11|11| 33 | 14C | |m8|10| 14.74 | FluentAssertions.Equivalency.Steps .GenericEnumerableEquivalencyStep | |
| |m13|19| 54min | |m28|03| First 5 of 16 issues
| |m75|05| 1h 49min | |m3|18| 182d | |m14|08| 41 | 13C | |m6|17| 11.53 | FluentAssertions.Common .StringExtensions |
| Code Query: Types to Fix Priority |
44 types matched
| 44 types | File | Breaking Point | Debt | Annual Interest | Issues | # lines of code (LOC) | DebtRating | DebtRatio | Full Name |
|---|---|---|---|---|---|---|---|---|---|
| 06Src\FluentAssertions\Equivalency\Steps\GenericEnumerableEquivalencyStep.cs | |m0|19| 147d | |m7|07| 57min | |m97|01| 2h 22min | |m3|15| 3 issues
| |m11|07| 33 | 14C | |m6|10| 14.74 | FluentAssertions.Equivalency.Steps .GenericEnumerableEquivalencyStep | |
| 05Src\FluentAssertions\Formatting\FormattedObjectGraph.cs | |m0|18| 152d | |m2|13| 42min | |m68|06| 1h 40min | |m5|12| 4 issues
| |m12|05| 36 | 15B | |m2|17| 8.1 | FluentAssertions.Formatting .FormattedObjectGraph | |
| 07Src\FluentAssertions\Common\StringExtensions.cs | |m1|17| 182d | |m6|08| 54min | |m74|04| 1h 49min | |m28|00| First 5 of 16 issues
| |m14|03| 41 | 09C | |m4|14| 11.53 | FluentAssertions.Common .StringExtensions | |
| 09Src\FluentAssertions\Formatting\Formatter.cs | |m1|16| 188d | |m5|09| 50min | |m65|08| 1h 37min | |m7|11| 5 issues
| |m10|09| 30 | 10C | |m6|13| 13.84 | FluentAssertions.Formatting .Formatter | |
| 08Src\FluentAssertions\Collections\MaximumMatching\MaximumMatchingSolver.cs | |m1|15| 191d | |m3|11| 44min | |m56|09| 1h 24min | |m9|06| First 5 of 6 issues
| |m0|16| 0 | 01E | |m100|00| 169.75 | FluentAssertions.Collections .MaximumMatching .MaximumMatchingSolver<TValue >+Match | |
| 01Src\FluentAssertions\AssertionOptions.cs | |m1|14| 192d | |m12|04| 1h 16min | |m98|00| 2h 24min | |m7|10| 5 issues
| |m3|14| 9 | 05D | |m24|05| 43.98 | FluentAssertions.AssertionOptions | |
| 00Src\FluentAssertions\Equivalency\EquivalencyValidator.cs | |m3|13| 243d | |m11|05| 1h 11min | |m73|05| 1h 47min | |m9|08| First 5 of 6 issues
| |m12|06| 34 | 08C | |m9|07| 19.83 | FluentAssertions.Equivalency .EquivalencyValidator | |
| 02Src\FluentAssertions\Equivalency\Steps\GenericDictionaryEquivalencyStep.cs | |m3|12| 249d | |m15|03| 1h 28min | |m88|03| 2h 8min | |m5|14| 4 issues
| |m20|02| 58 | 07C | |m6|12| 14.55 | FluentAssertions.Equivalency.Steps .GenericDictionaryEquivalencyStep | |
| 04Src\FluentAssertions\Common\Services.cs | |m4|11| 273d | |m18|02| 1h 38min | |m89|02| 2h 10min | |m13|03| First 5 of 8 issues
| |m13|04| 37 | 11C | |m9|08| 18.91 | FluentAssertions.Common.Services | |
| 03Src\FluentAssertions\Equivalency\SelfReferenceEquivalencyOptions.cs | |m6|10| 312d | |m0|16| 35min | |m25|13| 40min | |m5|13| 4 issues
| |m2|15| 7 | 06D | |m16|06| 31.16 | FluentAssertions.Equivalency .SelfReferenceEquivalencyOptions <TSelf>+Restriction<TMember> | |
| 16Src\FluentAssertions\Equivalency\Tracing\GetTraceMessage.cs | |m6|09| 331d | |m5|10| 50min | |m35|10| 55min | |m1|17| 2 issues
| 19N/A | 00E | |m67|01| 115.74 | FluentAssertions.Equivalency .Tracing.GetTraceMessage | |
| 15Src\FluentAssertions\Xml\Equivalency\XmlReaderValidator.cs | |m11|08| 1y 95d | |m3|12| 42min | |m20|14| 33min | |m9|05| First 5 of 6 issues
| |m29|01| 81 | 18B | |m0|19| 5.22 | FluentAssertions.Xml.Equivalency .XmlReaderValidator | |
| 17Src\FluentAssertions\Equivalency\EquivalencyValidationContext.cs | |m12|07| 1y 101d | |m10|06| 1h 9min | |m35|11| 54min | |m9|07| First 5 of 6 issues
| |m7|13| 21 | 12C | |m7|09| 16.04 | FluentAssertions.Equivalency .EquivalencyValidationContext | |
| 19Src\FluentAssertions\Formatting\FormattedObjectGraph.cs | |m14|06| 1y 168d | |m0|18| 33min | |m12|16| 22min | |m11|04| First 5 of 7 issues
| |m10|10| 29 | 19B | |m2|18| 7.04 | FluentAssertions.Formatting .FormattedObjectGraph+PossibleMult ilineFragment | |
| 18Src\FluentAssertions\Execution\GivenSelectorExtensions.cs | |m14|05| 1y 176d | |m1|15| 38min | |m14|15| 25min | |m22|02| First 5 of 13 issues
| |m7|12| 22 | 13C | |m6|11| 14.66 | FluentAssertions.Execution .GivenSelectorExtensions | |
| 11Src\FluentAssertions\Equivalency\EquivalencyOptions.cs | |m17|04| 1y 231d | |m36|00| 2h 42min | |m67|07| 1h 39min | |m22|01| First 5 of 13 issues
| |m7|11| 22 | 03E | |m30|04| 53.67 | FluentAssertions.Equivalency .EquivalencyOptions<TExpectation> | |
| 10Src\FluentAssertions\Equivalency\ConversionSelector.cs | |m17|03| 1y 232d | |m0|19| 33min | |m10|17| 20min | |m3|16| 3 issues
| |m11|08| 31 | 17B | |m3|16| 9.09 | FluentAssertions.Equivalency .ConversionSelector | |
| 12Src\FluentAssertions\Formatting\FormatChild.cs | |m18|02| 1y 273d | |m0|17| 35min | |m10|18| 20min | |m0|19| 1 issue
| 17N/A | 02E | |m46|03| 81.02 | FluentAssertions.Formatting .FormatChild | |
| 14Src\FluentAssertions\Equivalency\GetSubjectId.cs | |m22|01| 2y 18d | |m2|14| 41min | |m10|19| 20min | |m0|18| 1 issue
| 18N/A | 04E | |m54|02| 94.91 | FluentAssertions.Equivalency .GetSubjectId | |
| 13Src\FluentAssertions\Types\TypeSelector.cs | |m24|00| 2y 68d | |m23|01| 1h 56min | |m34|12| 53min | |m7|09| 5 issues
| |m37|00| 104 | 16B | |m3|15| 9.75 | FluentAssertions.Types .TypeSelector |
| Code Query: Issues to Fix Priority |
1,001 issues matched
| 1 001 issues | Debt | Annual Interest | Breaking Point | CodeElement | Full Name |
|---|---|---|---|---|---|
| High issue on: | |m0|08| 2min 0s | 0620min | |m0|08| 36d | 06 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|07| 2min 0s | 0520min | |m0|07| 36d | 05 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|10| 2min 0s | 0720min | |m0|10| 36d | 07 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|09| 2min 0s | 0920min | |m0|09| 36d | 09 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|06| 2min 0s | 0820min | |m0|06| 36d | 08 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|03| 2min 0s | 0120min | |m0|03| 36d | 01 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|02| 2min 0s | 0020min | |m0|02| 36d | 00 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|05| 2min 0s | 0220min | |m0|05| 36d | 02 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|04| 2min 0s | 0420min | |m0|04| 36d | 04 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|17| 2min 0s | 0320min | |m0|17| 36d | 03 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|16| 2min 0s | 1620min | |m0|16| 36d | 16 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|19| 2min 0s | 1520min | |m0|19| 36d | 15 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|18| 2min 0s | 1720min | |m0|18| 36d | 17 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|15| 2min 0s | 1920min | |m0|15| 36d | 19 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|12| 2min 0s | 1820min | |m0|12| 36d | 18 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|11| 2min 0s | 1120min | |m0|11| 36d | 11 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m0|14| 2min 0s | 1020min | |m0|14| 36d | 10 | Rule violated: Namespaces almost 100% tested should be 100% tested |
| High issue on: | |m0|13| 2min 0s | 1220min | |m0|13| 36d | 12 | Rule violated: Namespaces almost 100% tested should be 100% tested |
| High issue on: | |m1|00| 2min 56s | 1420min | |m0|00| 53d | 14 | Rule violated: Types almost 100% tested should be 100% tested |
| High issue on: | |m1|01| 2min 56s | 1320min | |m0|01| 53d | 13 | Rule violated: Types almost 100% tested should be 100% tested |
| Code Query: Debt and Issues per Rule |
43 rules matched
| 43 rules | Issues | Debt | Annual Interest | Breaking Point | Category | Full Name |
|---|---|---|---|---|---|---|
| Avoid namespaces mutually dependent | |m80|01| First 5 of 210 issues
| |m100|00| 7d 3h | |m100|00| 3d 3h | |m17|08| 2y 61d | 06Project Rules \ Architecture | Rule |
| Code should be tested | |m45|03| First 5 of 120 issues
| |m20|01| 1d 4h | |m17|03| 4h 51min | |m20|07| 2y 209d | 05Project Rules \ Code Coverage | Rule |
| Types 100% covered should be tagged with FullCoveredAttribute | |m65|02| First 5 of 172 issues
| |m14|02| 1d 0h | |m0|19| 0min 0s | |m0|19| 00:00:00 | 07Project Rules \ Code Coverage | Rule |
| Avoid types with too many methods | |m1|11| 4 issues
| |m10|03| 6h 17min | |m2|09| 46min | |m63|02| 8y 16d | 09Project Rules \ Code Smells | Rule |
| Namespaces almost 100% tested should be 100% tested | |m3|08| First 5 of 10 issues
| |m4|04| 2h 59min | |m12|04| 3h 20min | |m7|11| 328d | 08Project Rules \ Code Coverage | Rule |
| Avoid types initialization cycles | |m0|15| 3 issues
| |m4|05| 2h 30min | |m21|02| 6h 0min | |m3|14| 152d | 01Project Rules \ Object Oriented Design | Rule |
| Avoid custom delegates | |m1|10| 4 issues
| |m3|06| 2h 11min | |m4|08| 1h 20min | |m12|09| 1y 232d | 00Project Rules \ Design | Rule |
| Avoid public methods not publicly visible | |m100|00| First 5 of 261 issues
| |m3|07| 2h 10min | |m0|17| 0min 0s | |m0|18| 00:00:00 | 02Project Rules \ Visibility | Rule |
| Avoid namespaces dependency cycles | |m0|18| 1 issue
| |m3|09| 2h 0min | |m1|12| 20min | |m47|03| 6y | 04Project Rules \ Architecture | Rule |
| Avoid prefixing type name with parent namespace name | |m4|07| First 5 of 12 issues
| |m3|08| 2h 0min | |m1|11| 24min | |m39|04| 5y | 03Project Rules \ Naming Conventions | Rule |
| Types that could be declared as private, nested in a parent type | |m13|05| First 5 of 35 issues
| |m2|10| 1h 45min | |m0|18| 0min 0s | |m0|17| 00:00:00 | 16Project Rules \ Visibility | Rule |
| Avoid methods with too many overloads | |m1|14| 4 issues
| |m2|11| 1h 42min | |m0|15| 8min | |m100|00| 12y 273d | 15Project Rules \ Code Smells | Rule |
| Avoid types too big | |m0|17| 1 issue
| |m2|12| 1h 23min | |m0|16| 7min | |m91|01| 11y 240d | 17Project Rules \ Code Smells | Rule |
| Avoid interfaces too big | |m0|19| 1 issue
| |m1|13| 51min | |m0|13| 11min | |m35|05| 4y 208d | 19Project Rules \ Object Oriented Design | Rule |
| Types almost 100% tested should be 100% tested | |m7|06| First 5 of 21 issues
| |m1|14| 49min | |m25|01| 7h 0min | |m0|16| 43d | 18Project Rules \ Code Coverage | Rule |
| Avoid non-readonly static fields | |m1|13| 4 issues
| |m1|15| 48min | |m4|07| 1h 20min | |m4|12| 219d | 11Project Rules \ Immutability | Rule |
| Potentially Dead Methods | |m1|09| 4 issues
| |m1|16| 40min | |m2|10| 40min | |m7|10| 1y | 10Project Rules \ Dead Code | Rule |
| Don't assign a field from many methods | |m1|12| 4 issues
| |m0|17| 36min | |m4|06| 1h 20min | |m3|13| 164d | 12Project Rules \ Immutability | Rule |
| Avoid methods too big, too complex | |m0|16| 1 issue
| |m0|18| 34min | |m0|14| 9min | |m28|06| 3y 224d | 14Project Rules \ Code Smells | Rule |
| Class with no descendant should be sealed if possible | |m25|04| First 5 of 68 issues
| |m0|19| 34min | |m8|05| 2h 16min | |m1|15| 91d | 13Project Rules \ Object Oriented Design | Rule |
| Code Query: New Debt and Issues per Rule |
No rule matched
| Code Query: Debt and Issues per Code Element |
803 code elements matched
| 803 code elements | Issues | Debt | Annual Interest | Breaking Point | Full Name |
|---|---|---|---|---|---|
| |m100|00| 4 issues
| |m100|00| 3h 19min | |m26|06| 31min | |m41|02| 6y 121d | FluentAssertions.Equivalency .SelfReferenceEquivalencyOptions <TSelf> | |
| |m66|02| 3 issues
| |m63|01| 2h 6min | |m33|05| 40min | |m20|10| 3y 53d | FluentAssertions.Execution .AssertionScope | |
| |m0|12| 1 issue
| |m60|02| 2h 0min | |m16|10| 20min | |m39|04| 6y | FluentAssertions | |
| |m33|05| 2 issues
| |m47|03| 1h 33min | |m23|07| 28min | |m21|08| 3y 105d | FluentAssertions.Types .TypeSelector | |
| |m33|06| 2 issues
| |m44|04| 1h 28min | |m22|08| 27min | |m21|09| 3y 94d | FluentAssertions .NumericAssertionsExtensions | |
| |m66|03| 3 issues
| |m30|05| 1h 0min | |m7|16| 9min | |m41|03| 6y 116d | FluentAssertions.Common .TypeExtensions | |
| |m0|10| 1 issue
| |m29|06| 1h 0min | |m3|19| 3min 55s | |m100|00| 15y 116d | FluentAssertions .AssertionExtensions | |
| |m0|17| 1 issue
| |m25|07| 51min | |m9|14| 11min | |m29|06| 4y 208d | FluentAssertions.Equivalency .IEquivalencyOptions | |
| |m0|18| 1 issue
| |m25|08| 50min | |m16|12| 20min | |m16|11| 2y 192d | FluentAssertions.Collections | |
| |m0|11| 1 issue
| |m24|09| 50min | |m100|02| 2h 0min | |m2|17| 152d | FluentAssertions.AssertionOptions. .cctor() | |
| |m33|07| 2 issues
| |m24|12| 50min | |m45|03| 55min | |m5|15| 331d | FluentAssertions.Equivalency .Tracing.GetTraceMessage | |
| |m0|16| 1 issue
| |m24|11| 50min | |m100|01| 2h 0min | |m2|18| 152d | FluentAssertions.Equivalency.Steps .GenericDictionaryEquivalencyStep . .cctor() | |
| |m0|13| 1 issue
| |m24|10| 50min | |m100|00| 2h 0min | |m2|19| 152d | FluentAssertions.Equivalency.Steps .GenericEnumerableEquivalencyStep . .cctor() | |
| |m0|14| 1 issue
| |m20|13| 41min | |m16|13| 20min | |m13|12| 2y 18d | FluentAssertions.Equivalency .GetSubjectId | |
| |m33|08| 2 issues
| |m20|14| 40min | |m3|18| 4min 42s | |m56|01| 8y 225d | FluentAssertions.Common.MemberPath ..ctor(IMember,String) | |
| |m66|01| 3 issues
| |m19|15| 39min | |m37|04| 44min | |m5|16| 325d | FluentAssertions.Equivalency .EquivalencyValidator .TryToProveNodesAreEquivalent (Comparands ,IEquivalencyValidationContext) | |
| |m33|09| 2 issues
| |m19|16| 38min | |m5|17| 6min | |m38|05| 5y 341d | FluentAssertions.Equivalency.Steps .DictionaryEquivalencyStep .OnHandle(Comparands ,IEquivalencyValidationContext ,IEquivalencyValidator) | |
| |m66|04| 3 issues
| |m18|17| 37min | |m9|15| 10min | |m22|07| 3y 161d | FluentAssertions.Equivalency.Steps .EnumerableEquivalencyValidator .Execute<T>(Object[],T[]) | |
| |m0|15| 1 issue
| |m17|18| 35min | |m16|11| 20min | |m11|13| 1y 276d | FluentAssertions.Common | |
| |m0|19| 1 issue
| |m17|19| 35min | |m16|09| 20min | |m11|14| 1y 273d | FluentAssertions.Formatting .FormatChild |
| Code Query: New Debt and Issues per Code Element |
No code element matched
| Code Query: Types Hot Spots Filenamed |
161 types matched
| 161 types | File | Debt | Issues | Annual Interest | Breaking Point | # lines of code (LOC) | DebtRating | DebtRatio | Full Name |
|---|---|---|---|---|---|---|---|---|---|
| 06Src\FluentAssertions\Equivalency\SelfReferenceEquivalencyOptions.cs | |m100|00| 6h 27min | |m28|02| First 5 of 16 issues
| |m100|00| 2h 25min | |m29|08| 2y 242d | |m75|01| 211 | 09C | |m7|14| 14.15 | FluentAssertions.Equivalency .SelfReferenceEquivalencyOptions <TSelf> | |
| 05Src\FluentAssertions\TypeEnumerableExtensions.cs | |m81|01| 5h 18min | |m30|01| First 5 of 17 issues
| |m27|13| 41min | |m90|00| 7y 235d | |m5|17| 15 | 01E | |m69|00| 118.73 | FluentAssertions .TypeEnumerableExtensions | |
| 07Src\FluentAssertions\Common\TypeExtensions.cs | |m55|02| 3h 36min | |m100|00| First 5 of 54 issues
| |m32|12| 49min | |m51|05| 4y 150d | |m39|03| 109 | 07C | |m8|12| 14.6 | FluentAssertions.Common .TypeExtensions | |
| 09Src\FluentAssertions\NumericAssertionsExtensions.cs | |m52|03| 3h 25min | |m13|10| First 5 of 8 issues
| |m25|14| 39min | |m61|03| 5y 86d | |m100|00| 279 | 19B | |m3|19| 7.42 | FluentAssertions .NumericAssertionsExtensions | |
| 08Src\FluentAssertions\Execution\AssertionScope.cs | |m52|04| 3h 22min | |m16|08| First 5 of 10 issues
| |m57|08| 1h 24min | |m26|09| 2y 143d | |m44|02| 123 | 08C | |m6|15| 12.3 | FluentAssertions.Execution .AssertionScope | |
| 01Src\FluentAssertions\Equivalency\EquivalencyOptions.cs | |m41|05| 2h 42min | |m22|06| First 5 of 13 issues
| |m67|07| 1h 39min | |m17|12| 1y 231d | |m7|14| 22 | 02E | |m31|02| 53.67 | FluentAssertions.Equivalency .EquivalencyOptions<TExpectation> | |
| 00Src\FluentAssertions\ExceptionAssertionsExtensions.cs | |m32|06| 2h 8min | |m15|09| First 5 of 9 issues
| |m20|15| 31min | |m47|07| 4y 31d | |m3|18| 9 | 00E | |m48|01| 82.3 | FluentAssertions .ExceptionAssertionsExtensions | |
| 02Src\FluentAssertions\Types\TypeSelector.cs | |m29|07| 1h 56min | |m7|15| 5 issues
| |m35|10| 53min | |m23|11| 2y 68d | |m37|04| 104 | 18B | |m5|18| 9.75 | FluentAssertions.Types .TypeSelector | |
| 04Src\FluentAssertions\Equivalency\Steps\EnumerableEquivalencyValidator.cs | |m29|08| 1h 54min | |m26|04| First 5 of 15 issues
| |m17|16| 27min | |m48|06| 4y 64d | |m32|05| 90 | 06C | |m6|16| 11.73 | FluentAssertions.Equivalency.Steps .EnumerableEquivalencyValidator | |
| 03Src\FluentAssertions\Common\TypeMemberReflector.cs | |m28|09| 1h 50min | |m22|07| First 5 of 13 issues
| |m33|11| 50min | |m23|10| 2y 69d | |m22|06| 62 | 10C | |m8|11| 14.69 | FluentAssertions.Common .TypeMemberReflector | |
| 16Src\FluentAssertions\Common\Services.cs | |m24|10| 1h 38min | |m13|11| First 5 of 8 issues
| |m89|03| 2h 10min | |m6|14| 273d | |m13|09| 37 | 16C | |m10|07| 18.91 | FluentAssertions.Common.Services | |
| 15Src\FluentAssertions\Equivalency\Steps\GenericDictionaryEquivalencyStep.cs | |m22|11| 1h 28min | |m5|17| 4 issues
| |m88|04| 2h 8min | |m5|15| 249d | |m20|07| 58 | 15C | |m8|13| 14.55 | FluentAssertions.Equivalency.Steps .GenericDictionaryEquivalencyStep | |
| 17Src\FluentAssertions\ObjectAssertionsExtensions.cs | |m20|12| 1h 22min | |m7|16| 5 issues
| |m9|17| 15min | |m60|04| 5y 66d | |m9|13| 26 | 03D | |m17|04| 29.89 | FluentAssertions .ObjectAssertionsExtensions | |
| 19Src\FluentAssertions\AssertionOptions.cs | |m19|13| 1h 16min | |m7|14| 5 issues
| |m98|01| 2h 24min | |m3|17| 192d | |m3|19| 9 | 05D | |m25|03| 43.98 | FluentAssertions.AssertionOptions | |
| 18Src\FluentAssertions\Equivalency\EquivalencyValidator.cs | |m18|14| 1h 11min | |m9|12| First 5 of 6 issues
| |m73|06| 1h 47min | |m5|16| 243d | |m12|10| 34 | 17C | |m11|06| 19.83 | FluentAssertions.Equivalency .EquivalencyValidator | |
| 11Src\FluentAssertions\Equivalency\EquivalencyValidationContext.cs | |m17|15| 1h 9min | |m9|13| First 5 of 6 issues
| |m36|09| 54min | |m12|13| 1y 101d | |m7|15| 21 | 12C | |m9|08| 16.04 | FluentAssertions.Equivalency .EquivalencyValidationContext | |
| 10Src\FluentAssertions\Common\MemberPath.cs | |m17|16| 1h 9min | |m26|05| First 5 of 15 issues
| |m6|18| 11min | |m70|01| 6y 19d | |m9|12| 27 | 11C | |m8|09| 15.36 | FluentAssertions.Common.MemberPath | |
| 12Src\FluentAssertions\Equivalency\Steps\DictionaryEquivalencyStep.cs | |m14|17| 58min | |m3|18| 3 issues
| |m6|19| 10min | |m62|02| 5y 126d | |m6|16| 19 | 04D | |m14|05| 25.94 | FluentAssertions.Equivalency.Steps .DictionaryEquivalencyStep | |
| 14Src\FluentAssertions\Equivalency\Steps\GenericEnumerableEquivalencyStep.cs | |m14|18| 57min | |m3|19| 3 issues
| |m97|02| 2h 22min | |m2|19| 147d | |m11|11| 33 | 14C | |m8|10| 14.74 | FluentAssertions.Equivalency.Steps .GenericEnumerableEquivalencyStep | |
| 13Src\FluentAssertions\Common\StringExtensions.cs | |m13|19| 54min | |m28|03| First 5 of 16 issues
| |m75|05| 1h 49min | |m3|18| 182d | |m14|08| 41 | 13C | |m6|17| 11.53 | FluentAssertions.Common .StringExtensions |
| Code Query: Critical rules violated |
5 rules matched
| 5 rules | Issues | Debt | Annual Interest | Breaking Point | Category | Full Name |
|---|---|---|---|---|---|---|
| Avoid namespaces mutually dependent | |m100|0| First 5 of 210 issues
| |m100|0| 7d 3h | |m100|0| 3d 3h | |m14|2| 2y 61d | 1Project Rules \ Architecture | Rule |
| Avoid types too big | |m0|3| 1 issue
| |m2|1| 1h 23min | |m0|4| 7min | |m100|0| 11y 240d | 0Project Rules \ Code Smells | Rule |
| Avoid non-readonly static fields | |m1|1| 4 issues
| |m1|2| 48min | |m4|1| 1h 20min | |m0|3| 219d | 2Project Rules \ Immutability | Rule |
| Avoid methods too big, too complex | |m0|4| 1 issue
| |m0|3| 34min | |m0|3| 9min | |m27|1| 3y 224d | 4Project Rules \ Code Smells | Rule |
| Avoid having different types with same name | |m0|2| 1 issue
| |m0|4| 10min | |m0|2| 20min | |m0|4| 182d | 3Project Rules \ Naming Conventions | Rule |
Object Oriented Design
| Rule Violated: ND1200: Avoid interfaces too big |
• How to Fix Issues of this Rule: Typically to fix such issue, the interface must be refactored in a grape of smaller single-responsibility interfaces. For example if an interface IFoo handles both read and write operations, it can be split into two interfaces: IFooReader and IFooWriter. A usual problem for a large public interface is that it has many clients that consume it. As a consequence splitting it in smaller interfaces has an important impact and it is not always feasible. The estimated Debt, which means the effort to fix such issue, varies linearly from 20 minutes for an interface with 10 methods, up to 7 hours for an interface with 100 or more methods. The Debt is divided by two if the interface is not publicly visible, because in such situation only the current project is impacted by the refactoring.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1200:AvoidInterfacesTooBig", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 type matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 type | Members | Events | membersCount | Debt | Annual Interest | Full Name |
|---|---|---|---|---|---|---|
| |m0|0| First 5 of 1 method 16 properties
| 0no event | |m0|0| 17 | |m0|0| 51min | 011min | FluentAssertions.Equivalency .IEquivalencyOptions |
| Validated Rule: ND1201: Base class should not use derivatives |
• How to Fix Issues of this Rule: Understand the need for using derivatives, then imagine a new design, and then refactor. Typically an algorithm in the base class needs to access something from derived classes. You can try to encapsulate this access behind an abstract or a virtual method. If you see in the base class some conditions on typeof(DerivedClass) not only urgent refactoring is needed. Such condition can easily be replaced through an abstract or a virtual method. Sometime you'll see a base class that creates instance of some derived classes. In such situation, certainly using the factory method pattern http://en.wikipedia.org/wiki/Factory_method_pattern or the abstract factory pattern http://en.wikipedia.org/wiki/Abstract_factory_pattern will improve the design. The estimated Debt, which means the effort to fix such issue, is equal to 3 minutes per derived class used by the base class + 3 minutes per member of a derived class used by the base class.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1201:BaseClassShouldNotUseDerivatives", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
| Rule Violated: ND1202: Class shouldn't be too deep in inheritance tree |
• How to Fix Issues of this Rule: In Object-Oriented Programming, a well-known motto is Favor Composition over Inheritance. This is because inheritance comes with pitfalls. In general, the implementation of a derived class is very bound up with the base class implementation. Also a base class exposes implementation details to its derived classes, that's why it's often said that inheritance breaks encapsulation. On the other hands, Composition favors binding with interfaces over binding with implementations. Hence, not only the encapsulation is preserved, but the design is clearer, because interfaces make it explicit and less coupled. Hence, to break a long inheritance chain, Composition is often a powerful way to enhance the design of the refactored underlying logic. You can also read: http://en.wikipedia.org/wiki/Composition_over_inheritance and http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance The estimated Debt, which means the effort to fix such issue, depends linearly upon the depth of inheritance.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1202:ClassShouldntBeTooDeepInInheritanceTree", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 type matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 type | baseClasses | Depth of inheritance | Debt | Severity | Full Name |
|---|---|---|---|---|---|
| |m0|0| 4 types
| |m0|0| 5 | |m0|0| 6min | 0Medium | FluentAssertions.Collections .StringCollectionAssertions |
| Rule Violated: ND1203: Class with no descendant should be sealed if possible |
• How to Fix Issues of this Rule: For each matched class, take the time to assess if it is really meant to be subclassed. Certainly most matched class will end up being declared as sealed.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1203:ClassWithNoDescendantShouldBeSealedIfPossible", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
68 types matched
- The following list of types is truncated and contains only the first 20 types of the 68 types matched.
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 68 types | # lines of code (LOC) | Debt | Severity | Full Name |
|---|---|---|---|---|
| |m100|00| 90 | |m0|06| 0min 30s | 06Medium | FluentAssertions.Equivalency.Steps .EnumerableEquivalencyValidator | |
| |m89|01| 81 | |m0|05| 0min 30s | 05Medium | FluentAssertions.Xml.Equivalency .XmlReaderValidator | |
| |m71|02| 65 | |m0|07| 0min 30s | 07Medium | FluentAssertions.Primitives .StringEqualityStrategy | |
| |m43|03| 40 | |m0|09| 0min 30s | 09Medium | FluentAssertions.Execution .MessageBuilder | |
| |m37|04| 34 | |m0|08| 0min 30s | 08Medium | FluentAssertions.Collections .MaximumMatching .MaximumMatchingSolver<TValue> | |
| |m31|05| 29 | |m0|01| 0min 30s | 01Medium | FluentAssertions.Formatting .FormattedObjectGraph+PossibleMult ilineFragment | |
| |m30|06| 28 | |m0|00| 0min 30s | 00Medium | FluentAssertions.Equivalency .MultiDimensionalArrayEquivalencyS tep | |
| |m29|07| 27 | |m0|02| 0min 30s | 02Medium | FluentAssertions.Common.MemberPath | |
| |m26|09| 25 | |m0|04| 0min 30s | 04Medium | FluentAssertions.Execution .ContextDataItems | |
| |m26|08| 25 | |m0|03| 0min 30s | 03Medium | FluentAssertions.Xml.Equivalency .XmlIterator | |
| |m24|10| 23 | |m0|16| 0min 30s | 16Medium | FluentAssertions .CallerIdentification .CallerStatementBuilder | |
| |m23|11| 22 | |m0|15| 0min 30s | 15Medium | FluentAssertions.Execution .TestFrameworkProvider | |
| |m22|13| 21 | |m0|17| 0min 30s | 17Medium | FluentAssertions.Primitives .StringWildcardMatchingStrategy | |
| |m22|12| 21 | |m0|19| 0min 30s | 19Medium | FluentAssertions.Equivalency .Execution .CollectionMemberOptionsDecorator | |
| |m19|16| 18 | |m0|18| 0min 30s | 18Medium | FluentAssertions .CallerIdentification .QuotesParsingStrategy | |
| |m19|15| 18 | |m0|11| 0min 30s | 11Medium | FluentAssertions.Equivalency .Ordering.PathBasedOrderingRule | |
| |m19|14| 18 | |m0|10| 0min 30s | 10Medium | FluentAssertions.Equivalency .Matching.MappedPathMatchingRule | |
| |m16|19| 16 | |m0|12| 0min 30s | 12Medium | FluentAssertions.Execution .CollectingAssertionStrategy | |
| |m16|18| 16 | |m0|14| 0min 30s | 14Medium | FluentAssertions.Equivalency.Digit | |
| |m16|17| 16 | |m0|13| 0min 30s | 13Medium | FluentAssertions.Equivalency.Steps .AssertionResultSet |
| Validated Rule: ND1204: Overrides of Method() should call base.Method() |
• How to Fix Issues of this Rule: You should investigate if inheritance is the right choice to bind the base class implementation with the derived classes implementations. Does presenting the method with polymorphic behavior through an interface, would be a better design choice? In such situation, often using the design pattern template method http://en.wikipedia.org/wiki/Template_method_pattern might help improving the design.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1204:OverridesOfMethodShouldCallBaseMethod", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
| Validated Rule: ND1205: Do not hide base class methods |
• How to Fix Issues of this Rule: To fix a violation of this rule, remove or rename the method, or change the parameter signature so that the method does not hide the base method. However method hiding is for those times when you need to have two things to have the same name but different behavior. This is a very rare situations, described here: https://learn.microsoft.com/en-us/archive/blogs/ericlippert/method-hiding-apologia
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1205:DoNotHideBaseClassMethods", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
| Validated Rule: ND1206: A stateless class or structure might be turned into a static type |
• How to Fix Issues of this Rule: Declare all methods as static and transform the class or structure into a static class. By default issues of this rule have a Low severity because they reflect more an advice than a problem.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1206:AStatelessClassOrStructureMightBeTurnedIntoAStaticType", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
| Validated Rule: ND1207: Non-static classes should be instantiated or turned to static |
• How to Fix Issues of this Rule: First it is important to investigate why the class is never instantiated. If the reason is the class hosts only static methods then the class can be safely declared as static. Others reasons like, the class is meant to be instantiated via reflection, or is meant to be instantiated only by client code should lead to adapt this rule code to avoid these matches.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1207:NonStaticClassesShouldBeInstantiatedOrTurnedToStatic", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
| Validated Rule: ND1208: Methods should be declared static if possible |
• How to Fix Issues of this Rule: Declare matched methods as static. Since such method doesn't use any instance fields and methods of its type and base-types, you should consider if it makes sense, to move such a method to a static utility class.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1208:MethodsShouldBeDeclaredStaticIfPossible", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
| Validated Rule: ND1209: Constructor should not call a virtual method |
• How to Fix Issues of this Rule: Issues reported can be solved by re-designing object initialisation or by declaring the parent class as sealed, if possible. A constructor should primarily focus on initializing the state of its own class. Additional setup can be handled in constructors of derived classes or in dedicated methods called after object construction.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1209:ConstructorShouldNotCallAVirtualMethod", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
| Validated Rule: ND1210: Avoid the Singleton pattern |
• How to Fix Issues of this Rule: This rule pertains to the usual syntax of singletons, where a single static field holds the instance of the parent class. We emphasize that the issue lies in this specific syntax, which hinders testability. The concern is not having a single instance of the class during runtime. To address matches for this rule, create the single instance at the program's startup and pass it explicitly to all classes and methods requiring access. When dealing with multiple singletons, consider consolidating them into a single program execution context. This unified context simplifies propagation across various program units. The estimated Debt, which means the effort to fix such issue, is equal to 3 minutes per method relying on the singleton. It is not rare that hundreds of methods rely on the singleton and that it takes hours to get rid of a singleton, refactoring the way just explained above. The severity of each singleton issue is Critical because as explained, using a the singleton pattern can really prevent the whole program to be testable and maintained.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1210:AvoidTheSingletonPattern", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
| Validated Rule: ND1211: Don't assign static fields from instance methods |
• How to Fix Issues of this Rule: If the static field is just assigned once in the program lifetime, make sure to declare it as readonly and assign it inline, or from the static constructor. In Object-Oriented-Programming the natural artifact to hold states that can be modified is instance fields. Hence to fix violations of this rule, make sure to hold assignable states through instance fields, not through static fields.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1211:DontAssignStaticFieldsFromInstanceMethods", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No field matched
| Validated Rule: ND1212: Avoid empty interfaces |
• How to Fix Issues of this Rule: Remove the interface or add members to it. If the empty interface is being used to mark a set of types, replace the interface with a custom attribute. The estimated Debt, which means the effort to fix such issue, is equal to 10 minutes to discard an empty interface plus 3 minutes per type implementing an empty interface.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1212:AvoidEmptyInterfaces", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
| Rule Violated: ND1213: Avoid types initialization cycles |
• How to Fix Issues of this Rule: Types initialization cycles create confusion and unexpected behaviors. If several states hold by several classes must be initialized during the first access of any of those classes, a better design option is to create a dedicated class whose responsibility is to initialize and hold all these states. The estimated Debt, which means the effort to fix such issue, is equal to 20 minutes per cycle plus 10 minutes per type class constructor involved in the cycle.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1213:AvoidTypesInitializationCycles", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
3 methods matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
API Breaking Changes
| Validated Rule: ND1500: API Breaking Changes: Types |
• How to Fix Issues of this Rule: Make sure that public types that used to be presented to clients, still remain public now, and in the future. If a public type must really be removed, you can tag it with System.ObsoleteAttribute with a workaround message during a few public releases, until it gets removed definitely. Notice that this rule doesn't match types removed that were tagged as obsolete. Issues of this rule have a severity equal to High because an API Breaking change can provoque significant friction with consumers of the API.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1500:APIBreakingChangesTypes", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
| Validated Rule: ND1501: API Breaking Changes: Methods |
• How to Fix Issues of this Rule: Make sure that public methods that used to be presented to clients, still remain public now, and in the future. If a public method must really be removed, you can tag it with System.ObsoleteAttribute with a workaround message during a few public releases, until it gets removed definitely. Notice that this rule doesn't match methods removed that were tagged as obsolete. Issues of this rule have a severity equal to High because an API Breaking change can provoque significant friction with consumers of the API.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1501:APIBreakingChangesMethods", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
| Validated Rule: ND1502: API Breaking Changes: Fields |
• How to Fix Issues of this Rule: Make sure that public fields that used to be presented to clients, still remain public now, and in the future. If a public field must really be removed, you can tag it with System.ObsoleteAttribute with a workaround message during a few public releases, until it gets removed definitely. Notice that this rule doesn't match fields removed that were tagged as obsolete. Issues of this rule have a severity equal to High because an API Breaking change can provoque significant friction with consumers of the API.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1502:APIBreakingChangesFields", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No field matched
| Validated Rule: ND1503: API Breaking Changes: Interfaces and Abstract Classes |
• How to Fix Issues of this Rule: Make sure that the public contracts of interfaces and abstract classes that used to be presented to clients, remain stable now, and in the future. If a public contract must really be changed, you can tag abstract methods that will be removed with System.ObsoleteAttribute with a workaround message during a few public releases, until it gets removed definitely. Issues of this rule have a severity equal to High because an API Breaking change can provoque significant friction with consummers of the API. The severity is not set to Critical because an interface is not necessarily meant to be implemented by the consummer of the API.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1503:APIBreakingChangesInterfacesAndAbstractClasses", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
| Validated Rule: ND1504: Broken serializable types |
• How to Fix Issues of this Rule: Make sure that the serialization process of serializable types remains stable now, and in the future. Else you'll have to deal with Version Tolerant Serialization that is explained here: https://msdn.microsoft.com/en-us/library/ms229752(v=vs.110).aspx Issues of this rule have a severity equal to High because an API Breaking change can provoque significant friction with consummers of the API.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1504:BrokenSerializableTypes", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
| Validated Rule: ND1505: Avoid changing enumerations Flags status |
• How to Fix Issues of this Rule: Make sure the FlagsAttribute status of each enumeration remains stable now, and in the future.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1505:AvoidChangingEnumerationsFlagsStatus", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
Code Coverage
|
| Rule Violated: ND1600: Code should be tested |
• How to Fix Issues of this Rule: Write unit tests to test and cover the methods and their parent types matched by this rule.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1600:CodeShouldBeTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
120 members matched
- The following list of members is truncated and contains only the first 20 members of the 120 members matched.
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 120 types and methods | Percentage Coverage | # lines of code (LOC) | # lines of code not covered | Cyclomatic Complexity (CC) | Debt | Annual Interest | Full Name |
|---|---|---|---|---|---|---|---|
| |c80|06| 80% | |m42|03| 15 | |m50|07| 3 | |m31|03| 6 | |m59|04| 19min | 008min | FluentAssertions.Common.Services .ExecuteCustomInitializers() | |
| |c0|18| 0% | |m6|15| 3 | |m50|04| 3 | |m18|08| 4 | |m22|07| 8min | 018min | FluentAssertions.Execution .DefaultAssertionStrategy | |
| |c61|11| 61.54% | |m36|05| 13 | |m100|00| 5 | |m37|02| 7 | |m87|01| 26min | 027min | FluentAssertions.Common .CSharpAccessModifierExtensions .GetCSharpAccessModifier(FieldInfo ) | |
| |c81|04| 81.25% | |m45|02| 16 | |m50|05| 3 | |m12|10| 3 | |m29|05| 10min | 037min | FluentAssertions.Common .DictionaryHelpers.TryGetValue <TCollection,TKey,TValue> (TCollection,TKey,TValue&) | |
| |c50|12| 50% | |m21|09| 8 | |m75|02| 4 | |m18|07| 4 | |m71|02| 22min | 046min | FluentAssertions.Equivalency.Steps .EnumerableEquivalencyValidator .Execute<T>(Object[],T[]) | |
| |c80|05| 80% | |m27|07| 10 | |m25|09| 2 | |m6|11| 2 | |m11|13| 5min | 055min | FluentAssertions.Specialized .ExecutionTime..ctor(Func<Task> ,String,StartTimer) | |
| |c83|03| 83.33% | |m33|06| 12 | |m25|08| 2 | |m18|09| 4 | |m17|09| 7min | 064min 27s | FluentAssertions.Formatting .Formatter.ToString(Object ,FormattingOptions) | |
| |c50|14| 50% | |m9|14| 4 | |m25|12| 2 | |m6|17| 2 | |m15|11| 6min | 074min 24s | FluentAssertions.Events .EventHandlerFactory .DelegateInvokeMethod(Type) | |
| |c0|17| 0% | |m3|17| 2 | |m25|14| 2 | |m6|18| 2 | |m8|16| 4min 35s | 084min 0s | System.Text .StringBuilderExtensions | |
| |c62|10| 62.5% | |m21|08| 8 | |m50|03| 3 | |m6|12| 2 | |m18|08| 7min | 093min 54s | FluentAssertions.CallerIdentifier .OnlyOneFluentAssertionScopeOnCall Stack() | |
| |c0|19| 0% | |m0|19| 1 | |m0|17| 1 | |m0|19| 1 | |m0|19| 2min 31s | 103min 54s | FluentAssertions.Formatting .FormattedObjectGraph+PossibleMult ilineFragment..ctor (FormattedObjectGraph+PossibleMult ilineFragment) | |
| |c50|13| 50% | |m3|18| 2 | |m0|19| 1 | |m6|15| 2 | |m3|17| 3min 21s | 113min 46s | FluentAssertions.Execution .TestFrameworkProvider.Throw (String) | |
| |c97|00| 97.06% | |m100|00| 34 | |m0|15| 1 | |m68|01| 12 | |m14|12| 6min | 123min 42s | FluentAssertions.Common .ExpressionExtensions .GetMemberPath<TDeclaringType ,TPropertyType>(Expression<Func <TDeclaringType,TPropertyType>>) | |
| |c50|15| 50% | |m9|13| 4 | |m25|13| 2 | |m6|13| 2 | |m15|10| 6min | 133min 21s | FluentAssertions.Events .EventHandlerFactory .TypeIsDelegate(Type) | |
| |c83|02| 83.33% | |m51|01| 18 | |m50|06| 3 | |m100|00| 17 | |m60|03| 19min | 142min 58s | FluentAssertions.Equivalency .EqualityStrategyProvider .GetEqualityStrategy(Type) | |
| |c66|09| 66.67% | |m6|16| 3 | |m0|18| 1 | |m6|14| 2 | |m2|18| 2min 59s | 152min 56s | FluentAssertions.Common.Iterator<T >.get_Current() | |
| |c75|08| 75% | |m21|10| 8 | |m25|11| 2 | |m6|16| 2 | |m9|14| 5min | 162min 44s | FluentAssertions .ObjectAssertionsExtensions .BeDataContractSerializable<T> (ObjectAssertions,Func <EquivalencyOptions<T> ,EquivalencyOptions<T>>,String ,Object[]) | |
| |c28|16| 28.57% | |m18|11| 7 | |m100|01| 5 | |m18|06| 4 | |m100|00| 30min | 172min 44s | FluentAssertions.Common .FullFrameworkReflector .GetExportedTypes(Assembly) | |
| |c86|01| 86.67% | |m42|04| 15 | |m25|10| 2 | |m31|04| 6 | |m29|06| 10min | 182min 36s | FluentAssertions.Types .TypeSelector .UnwrapEnumerableTypes() | |
| |c80|07| 80% | |m12|12| 5 | |m0|16| 1 | |m25|05| 5 | |m8|15| 4min 38s | 192min 23s | FluentAssertions.Xml.Equivalency .XmlReaderValidator.Validate (Boolean) |
| Validated Rule: ND1601: New Types and Methods should be tested |
• How to Fix Issues of this Rule: Write unit-tests to cover the code of most methods and types added since the baseline.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1601:NewMethodsShouldBeTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No code container matched
| Validated Rule: ND1602: Methods refactored should be tested |
• How to Fix Issues of this Rule: Write unit-tests to cover the code of most methods and classes refactored.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1602:MethodsRefactoredShouldBeTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
| Rule Violated: ND1603: Assemblies and Namespaces should be tested |
• How to Fix Issues of this Rule: Write unit and integration tests to cover, even partially, code elements matched by this rule. Then use issues of the rules Code should be tested, New Types and Methods should be tested and Methods refactored should be tested to write more tests where it matters most, and eventually refactor some code to make it more testable.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1603:AssembliesNamespacesAndTypesShouldBeTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
1 namespace matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 1 namespace | # lines of code not covered | Debt | Severity | Full Name |
|---|---|---|---|---|
| |m0|0| 2 | |m0|0| 4min 0s | 0Low | System.Text |
| Rule Violated: ND1604: Types almost 100% tested should be 100% tested |
• How to Fix Issues of this Rule: Write more unit-tests dedicated to cover code not covered yet. If you find some hard-to-test code, it is certainly a sign that this code is not well designed and hence, needs refactoring.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1604:TypesAlmost100PercentTestedShouldBe100PercentTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
21 types matched
- The following list of types is truncated and contains only the first 20 types of the 21 types matched.
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 21 types | Percentage Coverage | # lines of code (LOC) | # lines of code not covered | methodsCulprit | Debt | Severity | Full Name |
|---|---|---|---|---|---|---|---|
| |c98|01| 98.57% | |m100|00| 279 | |m100|00| 4 | |m100|02| 2 methods | |m100|00| 4min 50s | 06High | FluentAssertions .NumericAssertionsExtensions | |
| |c98|04| 98.37% | |m39|01| 123 | |m33|04| 2 | |m100|01| 2 methods | |m33|04| 2min 56s | 05High | FluentAssertions.Execution .AssertionScope | |
| |c97|11| 97.12% | |m32|02| 104 | |m66|01| 3 | |m100|00| 2 methods | |m66|01| 3min 53s | 07High | FluentAssertions.Types .TypeSelector | |
| |c98|00| 98.77% | |m23|03| 81 | |m0|08| 1 | |m50|07| 1 method | |m0|08| 2min 0s | 09High | FluentAssertions.Xml.Equivalency .XmlReaderValidator | |
| |c98|02| 98.46% | |m17|04| 65 | |m0|09| 1 | |m50|08| 1 method | |m0|09| 2min 0s | 08High | FluentAssertions.Types .MethodInfoSelector | |
| |c98|03| 98.44% | |m16|05| 64 | |m0|06| 1 | |m50|09| 1 method | |m0|06| 2min 0s | 01High | FluentAssertions.Common .ExpressionExtensions | |
| |c96|15| 96.77% | |m15|06| 62 | |m33|03| 2 | |m50|06| 1 method | |m33|03| 2min 56s | 00High | FluentAssertions.Common .TypeMemberReflector | |
| |c96|16| 96.3% | |m12|07| 54 | |m33|02| 2 | |m50|03| 1 method | |m33|02| 2min 56s | 02High | FluentAssertions .EventRaisingExtensions | |
| |c98|05| 98.04% | |m11|08| 51 | |m0|05| 1 | |m50|04| 1 method | |m0|05| 2min 0s | 04High | FluentAssertions.Types .PropertyInfoSelector | |
| |c97|06| 97.73% | |m8|09| 44 | |m0|07| 1 | |m50|05| 1 method | |m0|07| 2min 0s | 03High | FluentAssertions.Formatting .DefaultValueFormatter | |
| |c97|07| 97.56% | |m7|10| 41 | |m0|17| 1 | |m50|16| 1 method | |m0|17| 2min 0s | 16High | FluentAssertions.Common .StringExtensions | |
| |c97|09| 97.5% | |m7|12| 40 | |m0|16| 1 | |m50|15| 1 method | |m0|16| 2min 0s | 15High | FluentAssertions.Types .AssemblyAssertions | |
| |c97|08| 97.5% | |m7|11| 40 | |m0|19| 1 | |m50|18| 1 method | |m0|19| 2min 0s | 17High | FluentAssertions.Execution .MessageBuilder | |
| |c97|10| 97.14% | |m5|13| 35 | |m0|18| 1 | |m50|17| 1 method | |m0|18| 2min 0s | 19High | FluentAssertions.Equivalency.Steps .EnumEqualityStep | |
| |c97|12| 97.06% | |m5|14| 34 | |m0|15| 1 | |m50|14| 1 method | |m0|15| 2min 0s | 18High | FluentAssertions.Equivalency .EquivalencyValidator | |
| |c96|13| 96.97% | |m4|16| 33 | |m0|12| 1 | |m50|11| 1 method | |m0|12| 2min 0s | 11High | FluentAssertions.Specialized .NonGenericAsyncFunctionAssertions | |
| |c96|14| 96.97% | |m4|15| 33 | |m0|11| 1 | |m50|10| 1 method | |m0|11| 2min 0s | 10High | FluentAssertions.Equivalency.Steps .GenericEnumerableEquivalencyStep | |
| |c95|19| 95.45% | |m0|19| 22 | |m0|14| 1 | |m50|13| 1 method | |m0|14| 2min 0s | 12High | FluentAssertions.EquivalencyPlan | |
| |c95|18| 95.45% | |m0|18| 22 | |m0|13| 1 | |m50|12| 1 method | |m0|13| 2min 0s | 14High | FluentAssertions.Execution .TestFrameworkProvider | |
| |c95|17| 95.45% | |m0|17| 22 | |m0|10| 1 | 19no method | |m0|10| 2min 0s | 13High | FluentAssertions.Equivalency .EquivalencyOptions<TExpectation> |
| Rule Violated: ND1605: Namespaces almost 100% tested should be 100% tested |
• How to Fix Issues of this Rule: Write more unit-tests dedicated to cover code not covered yet in the namespace. If you find some hard-to-test code, it is certainly a sign that this code is not well designed and hence, needs refactoring.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1605:NamespacesAlmost100PercentTestedShouldBe100PercentTested", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
10 namespaces matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| Validated Rule: ND1606: Types that used to be 100% covered by tests should still be 100% covered |
• How to Fix Issues of this Rule: Write more unit-tests dedicated to cover code not covered anymore. If you find some hard-to-test code, it is certainly a sign that this code is not well designed and hence, needs refactoring. You'll find code impossible to cover by unit-tests, like calls to MessageBox.Show(). An infrastructure must be defined to be able to mock such code at test-time.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1606:TypesThatUsedToBe100PercentCoveredByTestsShouldStillBe100PercentCovered", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
| Validated Rule: ND1607: Types tagged with FullCoveredAttribute should be 100% covered |
• How to Fix Issues of this Rule: Write more unit-tests dedicated to cover code of matched classes not covered yet. If you find some hard-to-test code, it is certainly a sign that this code is not well designed and hence, needs refactoring.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1607:TypesTaggedWithFullCoveredAttributeShouldBe100PercentCovered", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
| Rule Violated: ND1608: Types 100% covered should be tagged with FullCoveredAttribute |
• How to Fix Issues of this Rule: Just tag types 100% covered by tests with the FullCoveredAttribute class that can be found in NDepend.API.dll, or by an attribute of yours with this name defined in any namespace in your own code.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1608:Types100PercentCoveredShouldBeTaggedWithFullCoveredAttribute", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
172 types matched
- The following list of types is truncated and contains only the first 20 types of the 172 types matched.
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 172 types | # lines of code (LOC) | Debt | Severity | Full Name |
|---|---|---|---|---|
| |m4|03| 10 | |m0|06| 3min 0s | 06Low | FluentAssertions .AggregateExceptionExtractor | |
| |m3|04| 9 | |m0|05| 3min 0s | 05Low | FluentAssertions.AssertionOptions | |
| |m3|06| 8 | |m0|07| 3min 0s | 07Low | FluentAssertions .AsyncAssertionsExtensions | |
| |m1|09| 4 | |m0|09| 3min 0s | 09Low | FluentAssertions.AtLeast | |
| |m0|12| 3 | |m0|08| 3min 0s | 08Low | FluentAssertions .AtLeast+AtLeastTimesConstraint | |
| |m1|08| 4 | |m0|01| 3min 0s | 01Low | FluentAssertions.AtMost | |
| |m0|13| 3 | |m0|00| 3min 0s | 00Low | FluentAssertions .AtMost+AtMostTimesConstraint | |
| |m4|02| 11 | |m0|02| 3min 0s | 02Low | FluentAssertions .CallerIdentifier+StackFrameRefere nce | |
| |m0|18| 3 | |m0|04| 3min 0s | 04Low | FluentAssertions.Disposable | |
| |m1|11| 4 | |m0|03| 3min 0s | 03Low | FluentAssertions.Exactly | |
| |m0|16| 3 | |m0|16| 3min 0s | 16Low | FluentAssertions .Exactly+ExactlyTimesConstraint | |
| |m3|05| 9 | |m0|15| 3min 0s | 15Low | FluentAssertions .ExceptionAssertionsExtensions | |
| |m0|14| 3 | |m0|17| 3min 0s | 17Low | FluentAssertions.LessThan | |
| |m0|15| 3 | |m0|19| 3min 0s | 19Low | FluentAssertions .LessThan+LessThanTimesConstraint | |
| |m1|10| 4 | |m0|18| 3min 0s | 18Low | FluentAssertions.MoreThan | |
| |m0|17| 3 | |m0|11| 3min 0s | 11Low | FluentAssertions .MoreThan+MoreThanTimesConstraint | |
| |m2|07| 6 | |m0|10| 3min 0s | 10Low | FluentAssertions .OccurrenceConstraint | |
| |m6|01| 15 | |m0|12| 3min 0s | 12Low | FluentAssertions .TypeEnumerableExtensions | |
| |m0|19| 1 | |m0|14| 3min 0s | 14Low | FluentAssertions.Types.AllTypes | |
| |m8|00| 19 | |m0|13| 3min 0s | 13Low | FluentAssertions.Specialized .ExceptionAssertions<TException >+ExceptionMessageAssertion |
| Validated Rule: ND1609: Methods should have a low C.R.A.P score |
• How to Fix Issues of this Rule: In such situation, it is recommended to both refactor the complex method logic into several smaller and less complex methods (that might belong to some new types especially created), and also write unit-tests to full cover the refactored logic. You'll find code impossible to cover by unit-tests, like calls to MessageBox.Show(). An infrastructure must be defined to be able to mock such code at test-time.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1609:MethodsShouldHaveALowCRAPScore", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No method matched
Dead Code
|
| Validated Rule: ND1700: Potentially Dead Types |
• How to Fix Issues of this Rule: Static analysis cannot provide an exact list of dead types, because there are several ways to use a type dynamically (like through reflection). For each type matched by this query, first investigate if the type is used somehow (like through reflection). If the type is really never used, it is important to remove it to avoid maintaining useless code. If you estimate the code of the type might be used in the future, at least comment it, and provide an explanatory comment about the future intentions. If a type is used somehow, but still is matched by this rule, you can tag it with the attribute IsNotDeadCodeAttribute found in NDepend.API.dll to avoid matching the type again. You can also provide your own attribute for this need, but then you'll need to adapt this code rule. Issues of this rule have a Debt equal to 15 minutes because it only takes a short while to investigate if a type can be safely discarded. The Annual Interest of issues of this rule, the annual cost to not fix such issue, is proportional to the type #lines of code, because the bigger the type is, the more it slows down maintenance.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1700:PotentiallyDeadTypes", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No type matched
| Rule Violated: ND1701: Potentially Dead Methods |
• How to Fix Issues of this Rule: Static analysis cannot provide an exact list of dead methods, because there are several ways to invoke a method dynamically (like through reflection). For each method matched by this query, first investigate if the method is invoked somehow (like through reflection). If the method is really never invoked, it is important to remove it to avoid maintaining useless code. If you estimate the code of the method might be used in the future, at least comment it, and provide an explanatory comment about the future intentions. If a method is invoked somehow, but still is matched by this rule, you can tag it with the attribute IsNotDeadCodeAttribute found in NDepend.API.dll to avoid matching the method again. You can also provide your own attribute for this need, but then you'll need to adapt this code rule. Issues of this rule have a Debt equal to 10 minutes because it only takes a short while to investigate if a method can be safely discarded. On top of these 10 minutes, the depth of usage of such method adds up 3 minutes per unity because dead method only called by dead code takes a bit more time to be investigated. The Annual Interest of issues of this rule, the annual cost to not fix such issue, is proportional to the type #lines of code, because the bigger the method is, the more it slows down maintenance.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1701:PotentiallyDeadMethods", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
4 methods matched
-
Formatting: bold✱ means added, ● means code was changed,
strike-boldmeans removed (since baseline)
| 4 methods | depth | MethodsCallingMe | Debt | Annual Interest | Full Name |
|---|---|---|---|---|---|
| |m0|1| 0 | 1no method | |m0|1| 10min | 19min | System.Text .StringBuilderExtensions .AppendJoin<T>(StringBuilder ,String,IEnumerable<T>) | |
| |m0|0| 0 | 0no method | |m0|0| 10min | 013min | FluentAssertions.Formatting .FormattedObjectGraph+PossibleMult ilineFragment .AddEndingLineOrFragment(String) | |
| |m0|3| 0 | 3no method | |m0|3| 10min | 39min | FluentAssertions.Execution .AssertionScope.set_Current (AssertionScope) | |
| |m0|2| 0 | 2no method | |m0|2| 10min | 29min | FluentAssertions.Common .StringExtensions .UnescapePlaceholders(String) |
| Validated Rule: ND1702: Potentially Dead Fields |
• How to Fix Issues of this Rule: Static analysis cannot provide an exact list of dead fields, because there are several ways to assign or read a field dynamically (like through reflection). For each field matched by this query, first investigate if the field is used somehow (like through reflection). If the field is really never used, it is important to remove it to avoid maintaining a useless code element. If a field is used somehow, but still is matched by this rule, you can tag it with the attribute IsNotDeadCodeAttribute found in NDepend.API.dll to avoid matching the field again. You can also provide your own attribute for this need, but then you'll need to adapt this code rule. Issues of this rule have a Debt equal to 10 minutes because it only takes a short while to investigate if a method can be safely discarded. The Annual Interest of issues of this rule, the annual cost to not fix such issue, is set by default to 8 minutes per unused field matched.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1702:PotentiallyDeadFields", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No field matched
| Validated Rule: ND1703: Wrong usage of IsNotDeadCodeAttribute |
• How to Fix Issues of this Rule: Just remove IsNotDeadCodeAttribute tagging of types, methods and fields matched by this rule because this tag is not useful anymore.
• How to Suppress an Issue of this Rule: In source code, tag the concerned code element with this attribute: [SuppressMessage("NDepend", "ND1703:WrongUsageOfIsNotDeadCodeAttribute", Justification="...")] This attribute requires the compilation symbol CODE_ANALYSIS to be set on each Visual Studio project relying on it. Without CODE_ANALYSIS symbol defined, the attribute is not compiled and the issues are not suppressed.
No member matched
Code Diff Summary
| Code Query: New assemblies |
No assembly matched
| Code Query: Assemblies removed |
No assembly matched
| Code Query: Assemblies where code was changed |
No assembly matched
| Code Query: New namespaces |
No namespace matched
| Code Query: Namespaces removed |
No namespace matched
| Code Query: Namespaces where code was changed |
No namespace matched
| Code Query: New types |
No type matched
| Code Query: Types removed |
No type matched
| Code Query: Types where code was changed |
No type matched
| Code Query: Heuristic to find types moved from one namespace or assembly to another |
No type matched
| Code Query: Types directly using one or several types changed |
No type matched
| Code Query: Types indirectly using one or several types changed |
No type matched
| Code Query: New methods |
No method matched
| Code Query: Methods removed |
No method matched
| Code Query: Methods where code was changed |
No method matched
| Code Query: Methods directly calling one or several methods changed |
No method matched
| Code Query: Methods indirectly calling one or several methods changed |
No method matched
| Code Query: New fields |
No field matched
| Code Query: Fields removed |
No field matched
| Code Query: Third party types that were not used and that are now used |
No type matched
| Code Query: Third party types that were used and that are not used anymore |
No type matched
| Code Query: Third party methods that were not used and that are now used |
No method matched
| Code Query: Third party methods that were used and that are not used anymore |
No method matched
| Code Query: Third party fields that were not used and that are now used |
No field matched
| Code Query: Third party fields that were used and that are not used anymore |
No field matched
Assemblies Dependencies
| Assembly | Depends on | Is referenced by |
|---|---|---|
| FluentAssertions v1.0.0.0 | netstandard v2.1.0.0 ; System.Runtime v8.0.0.0 ; | - |
Assemblies Build Order
- FluentAssertions
Assemblies Build Order
- FluentAssertions
Abstractness versus Instability Diagram
The Abstractness versus Instability Diagram helps to detect which assemblies are potentially painful to maintain (i.e concrete and stable) and which assemblies are potentially useless (i.e abstract and instable).
- Abstractness:
If an assembly contains many abstract types (i.e interfaces and abstract classes) and few concrete types, it is considered as abstract.
- Instability: An assembly is considered stable if its types are used by a lot of types from other assemblies. In this context stable means painful to modify.
Online documentation: