Class RecursionGuard

Namespace: AutoFixture.Kernel
Assembly: AutoFixture.dll

Base class for recursion handling. Tracks requests and reacts when a recursion point in the specimen creation process is detected.

public class RecursionGuard : ISpecimenBuilderNode, ISpecimenBuilder, IEnumerable<ISpecimenBuilder>, IEnumerable

Inheritance

objectRecursionGuard

Derived

NullRecursionGuard, OmitOnRecursionGuard, ThrowingRecursionGuard

Implements

ISpecimenBuilderNode, ISpecimenBuilder, IEnumerable<ISpecimenBuilder>, IEnumerable

Inherited Members

object.GetType(), object.MemberwiseClone(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()

Extension Methods

SpecimenFactory.Create<T>(ISpecimenBuilder), SpecimenFactory.CreateMany<T>(ISpecimenBuilder), SpecimenFactory.CreateMany<T>(ISpecimenBuilder, int), SpecimenCommand.Do<T>(ISpecimenBuilder, Action<T>), SpecimenCommand.Do<T1, T2>(ISpecimenBuilder, Action<T1, T2>), SpecimenCommand.Do<T1, T2, T3>(ISpecimenBuilder, Action<T1, T2, T3>), SpecimenCommand.Do<T1, T2, T3, T4>(ISpecimenBuilder, Action<T1, T2, T3, T4>), SpecimenQuery.Get<T, TResult>(ISpecimenBuilder, Func<T, TResult>), SpecimenQuery.Get<T1, T2, TResult>(ISpecimenBuilder, Func<T1, T2, TResult>), SpecimenQuery.Get<T1, T2, T3, TResult>(ISpecimenBuilder, Func<T1, T2, T3, TResult>), SpecimenQuery.Get<T1, T2, T3, T4, TResult>(ISpecimenBuilder, Func<T1, T2, T3, T4, TResult>), SpecimenBuilderNode.GraphEquals(ISpecimenBuilderNode, ISpecimenBuilderNode), SpecimenBuilderNode.GraphEquals(ISpecimenBuilderNode, ISpecimenBuilderNode, IEqualityComparer<ISpecimenBuilder>), CustomizationExtensions.ToCustomization(ISpecimenBuilder)

Constructors

RecursionGuard(ISpecimenBuilder)

Initializes a new instance of the RecursionGuard class.

[Obsolete("This constructor overload is obsolete and will be removed in a future version of AutoFixture. Please use RecursionGuard(ISpecimenBuilder, IRecursionHandler) instead.", true)]
public RecursionGuard(ISpecimenBuilder builder)

Parameters

builder ISpecimenBuilder

RecursionGuard(ISpecimenBuilder, IRecursionHandler)

Initializes a new instance of the RecursionGuard class.

public RecursionGuard(ISpecimenBuilder builder, IRecursionHandler recursionHandler)

Parameters

builder ISpecimenBuilder

recursionHandler IRecursionHandler

RecursionGuard(ISpecimenBuilder, IRecursionHandler, int)

Initializes a new instance of the RecursionGuard class.

public RecursionGuard(ISpecimenBuilder builder, IRecursionHandler recursionHandler, int recursionDepth)

Parameters

builder ISpecimenBuilder

recursionHandler IRecursionHandler

recursionDepth int

RecursionGuard(ISpecimenBuilder, IEqualityComparer)

Initializes a new instance of the RecursionGuard class.

[Obsolete("This constructor overload is obsolete and will be removed in a future version of AutoFixture. Please use RecursionGuard(ISpecimenBuilder, IRecursionHandler, IEqualityComparer, int) instead.", true)]
public RecursionGuard(ISpecimenBuilder builder, IEqualityComparer comparer)

Parameters

builder ISpecimenBuilder

comparer IEqualityComparer

RecursionGuard(ISpecimenBuilder, IRecursionHandler, IEqualityComparer)

Initializes a new instance of the RecursionGuard class.

[Obsolete("This constructor overload is obsolete and will be removed in a future version of AutoFixture. Please use RecursionGuard(ISpecimenBuilder, IRecursionHandler, IEqualityComparer, int) instead.", true)]
public RecursionGuard(ISpecimenBuilder builder, IRecursionHandler recursionHandler, IEqualityComparer comparer)

Parameters

builder ISpecimenBuilder

recursionHandler IRecursionHandler

comparer IEqualityComparer

RecursionGuard(ISpecimenBuilder, IRecursionHandler, IEqualityComparer, int)

Initializes a new instance of the RecursionGuard class.

public RecursionGuard(ISpecimenBuilder builder, IRecursionHandler recursionHandler, IEqualityComparer comparer, int recursionDepth)

Parameters

builder ISpecimenBuilder

recursionHandler IRecursionHandler

comparer IEqualityComparer

recursionDepth int

Properties

Builder

Gets the decorated builder supplied via the constructor.

public ISpecimenBuilder Builder { get; }

Property Value

ISpecimenBuilder

Comparer

Gets the comparer supplied via the constructor.

public IEqualityComparer Comparer { get; }

Property Value

IEqualityComparer

RecordedRequests

Gets the recorded requests so far.

protected IEnumerable RecordedRequests { get; }

Property Value

IEnumerable

RecursionDepth

The recursion depth at which the request will be treated as a recursive request.

public int RecursionDepth { get; }

Property Value

int

RecursionHandler

Gets the recursion handler originally supplied as a constructor argument.

public IRecursionHandler RecursionHandler { get; }

Property Value

IRecursionHandler

Methods

Compose(IEnumerable<ISpecimenBuilder>)

Composes the supplied builders.

public virtual ISpecimenBuilderNode Compose(IEnumerable<ISpecimenBuilder> builders)

Parameters

builders IEnumerable<ISpecimenBuilder>

The builders to compose.

Returns

ISpecimenBuilderNode

A ISpecimenBuilderNode instance.

Remarks

Note to implementers:

The intent of this method is to compose the supplied builders into a new instance of the type implementing `ISpecimenBuilderNode`. Thus, the concrete return type is expected to the same type as the type implementing the method. However, it is not considered a failure to deviate from this idiom - it would just not be a mainstream implementation.

The returned instance is normally expected to contain the builders supplied as an argument, but again this is not strictly required. The implementation may decide to filter the sequence or add to it during composition.

Create(object, ISpecimenContext)

Creates a new specimen based on a request.

public object Create(object request, ISpecimenContext context)

Parameters

request object

The request that describes what to create.

context ISpecimenContext

A context that can be used to create other specimens.

Returns

object

The requested specimen if possible; otherwise a NoSpecimen instance.

Remarks

The request can be any object, but will often be a `Type` or other `MemberInfo` instances.

Note to implementers: Implementations are expected to return a `NoSpecimen` instance if they can't satisfy the request.

GetEnumerator()

public virtual IEnumerator<ISpecimenBuilder> GetEnumerator()

Returns

IEnumerator<ISpecimenBuilder>

HandleRecursiveRequest(object)

Handles a request that would cause recursion.

[Obsolete("This method will be removed in a future version of AutoFixture. Use IRecursionHandler.HandleRecursiveRequest instead.", true)]
public virtual object HandleRecursiveRequest(object request)

Parameters

request object

Returns

object