PeanutButter
Loading...
Searching...
No Matches
PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity > Class Template Reference

Base class for builders to produce instance of objects with a fluent builder-like syntax. Also includes utilities like randomizing property values. More...

Inheritance diagram for PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >:
PeanutButter.RandomGenerators.GenericBuilderBase PeanutButter.RandomGenerators.IGenericBuilder PeanutButter.Utils.IBuilder< TBuilder, TEntity > PeanutButter.TestUtils.Async.ImmediateTaskRunnerBuilder

Public Member Functions

IGenericBuilder GenericWithRandomProps ()
 Sets up the builder to build with random property values unless the level specified is too deep, in which case it bails out.
Returns
The current builder instance

IGenericBuilder WithBuildLevel (int level)
 Sets the maximum depth to traverse when randomizing properties.
Parameters
levelHow far down the rabbit-hole to go
Returns
The builder

object GenericBuild ()
 Builds an instance of the object this builder builds.
Returns
Instance of object for which this builder is designed, with all properties as default values

object GenericDeepBuild ()
 Builds an instance of the object this builder builds.
Returns
Instance of object for which this builder is designed, with properties default but complex objects filled in default

TBuilder WithProp (Action< TEntity > action)
 Generic method to set a property on the entity.
TBuilder WithProp (ActionRef< TEntity > action)
 Generic method to set a property on an entity when that entity is a struct type.
virtual TEntity ConstructEntity ()
 Constructs a new instance of the entity. Mostly, an inheritor won't have to care, but if your entity has no parameterless constructor, you'll want to override this in your derived builder.
virtual TEntity Build ()
 Builds the instance of TEntity, applying all builder actions in order to provide the required entity.
virtual TBuilder WithDefaultDateTimeKind (DateTimeKind dateTimeKind)
 Sets the default DateTimeKind to be expected on DateTime properties randomly generated by this builder.
virtual TBuilder WithRandomProps ()
 Randomizes all properties on the instance of TEntity being built. This method will use methods from RandomValueGen and may generate new GenericBuilder types for generating more complex properties.
virtual TBuilder WithFilledCollections ()
 Attempts to fill collections with random data. May fail with stack-overflows on complex, cyclic-referencing objects. Not enabled by default on random builds, use with caution – may lead to a stack overflow with collections which contain items whose types which have collections with items whose types... and so on.

Static Public Member Functions

static TBuilder Create ()
 Creates a new instance of the builder; used to provide a fluent syntax NB: You must implement anew this in a derived class if you expect decorations (eg [RequireNonNull]) to be properly applied at all levels after using syntax like DerivedBuilder.BuildRandom() or DerivedBuilder.Create().WithRandomProps().Build()
static TEntity BuildDefault ()
 Builds a default instance of the entity.
static TEntity BuildRandom ()
 Convenience method: Creates a builder, sets random properties, returns a new instance of the entity.
static void WithDefaultProp (Action< TEntity > action)
 Adds a default property setter, shared amongst all instances of this particular builder type.
Static Public Member Functions inherited from PeanutButter.RandomGenerators.GenericBuilderBase
static bool TryCreateSubstituteFor< T > (bool callThrough, out T result)
 Attempt to create a substitute for the given type.
static bool TryCreateSubstituteFor< T > (bool callThrough, object[] constructorParameters, out T result)
 Attempt to create a substitute for the given type with parameters.
static bool TryCreateSubstituteFor< T > (bool throwOnError, bool callThrough, out T result)
 Attempt to create a substitute from a type with a parameterless constructor.
static bool TryCreateSubstituteFor< T > (bool throwOnError, bool callThrough, object[] constructorParameters, out T result)
 Attempts perform Substitute.For<T>.

Public Attributes

readonly List< object > CreatedValues = new()

Properties

object[] ParameterValues [get]
bool Success = true [get, set]
Properties inherited from PeanutButter.RandomGenerators.GenericBuilderBase
static int MaxRandomPropsLevel = 10 [get, set]
 Sets the maximum level to go to when generating random properties of random properties, to prevent stack and memory overflows.

Additional Inherited Members

Static Public Attributes inherited from PeanutButter.RandomGenerators.GenericBuilderBase
const string ENV_FORCE_NSUBSTITUTE_FOR_RANDOMVALUEGEN = "FORCE_NSUBSTITUTE_FOR_RANDOMVALUEGEN"
 The environment variable which is observed to force using NSubstitute for random value generation of interface types.
Static Protected Member Functions inherited from PeanutButter.RandomGenerators.GenericBuilderBase
static Assembly FindOrLoadAssembly< T > (string name, bool retrying)
 Attempts to load the assembly alongside the Type T.
Static Protected Attributes inherited from PeanutButter.RandomGenerators.GenericBuilderBase
static readonly Dictionary< Type, Type > DynamicBuilders = new Dictionary<Type, Type>()
 Holds a lookup of all GenericBuilder classes which have been generated to facilitate automatic property building. Searched when looking for a builder to generate a property before attempting to generate a builder type (re-use)
static readonly Dictionary< Type, Type > UserBuilders = new Dictionary<Type, Type>()
 Holds a lookup of GenericBuilder classes which were provided by consuming code. Searched before searching the DynamicBuilders lookup or attempting to create an auto-generated builder type.
static readonly Type NullableGeneric = typeof(Nullable<>)
 Provides a lookup to the type which is the generic Nulllable.
static readonly Type GenericBuilderBaseType = typeof(GenericBuilderBase)
 Provides a lookup to the type which is the GenericBuilder.

Detailed Description

Base class for builders to produce instance of objects with a fluent builder-like syntax. Also includes utilities like randomizing property values.

Template Parameters
TBuilderConcrete type of the current builder, required to be able to return the builder from all With* methods
TEntityType of entity this builder builds
Type Constraints
TBuilder :GenericBuilder 
TBuilder :TBuilder 
TBuilder :TEntity 

Member Function Documentation

◆ Build()

virtual TEntity PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >.Build ( )
virtual

Builds the instance of TEntity, applying all builder actions in order to provide the required entity.

Returns
An instance of TEntity with all builder actions run on it

Implements PeanutButter.Utils.IBuilder< TBuilder, TEntity >.

Reimplemented in PeanutButter.TestUtils.Async.ImmediateTaskRunnerBuilder.

◆ BuildDefault()

TEntity PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >.BuildDefault ( )
static

Builds a default instance of the entity.

Returns
New instance of the builder entity

◆ BuildRandom()

TEntity PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >.BuildRandom ( )
static

Convenience method: Creates a builder, sets random properties, returns a new instance of the entity.

Returns
New instance of TEntity with all randomizable properties randomized

◆ ConstructEntity()

virtual TEntity PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >.ConstructEntity ( )
virtual

Constructs a new instance of the entity. Mostly, an inheritor won't have to care, but if your entity has no parameterless constructor, you'll want to override this in your derived builder.

Returns
New instance of TEntity, constructed from the parameterless constructor, when possible
Exceptions
GenericBuilderInstanceCreationException

◆ Create()

TBuilder PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >.Create ( )
static

Creates a new instance of the builder; used to provide a fluent syntax NB: You must implement anew this in a derived class if you expect decorations (eg [RequireNonNull]) to be properly applied at all levels after using syntax like DerivedBuilder.BuildRandom() or DerivedBuilder.Create().WithRandomProps().Build()

  • this may not seem obvious, but the base class' static method will be called otherwise. This does not apply if you're using GetRandom<T>() as this will use new DerivedBuilder() which will ensure that decorations are read through the entire hierarchy
Returns
New instance of the builder

◆ GenericBuild()

object PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >.GenericBuild ( )

Builds an instance of the object this builder builds.

Returns
Instance of object for which this builder is designed, with all properties as default values

Implements PeanutButter.RandomGenerators.IGenericBuilder.

◆ GenericDeepBuild()

object PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >.GenericDeepBuild ( )

Builds an instance of the object this builder builds.

Returns
Instance of object for which this builder is designed, with properties default but complex objects filled in default

Implements PeanutButter.RandomGenerators.IGenericBuilder.

◆ GenericWithRandomProps()

IGenericBuilder PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >.GenericWithRandomProps ( )

Sets up the builder to build with random property values unless the level specified is too deep, in which case it bails out.

Returns
The current builder instance

Implements PeanutButter.RandomGenerators.IGenericBuilder.

◆ WithBuildLevel()

IGenericBuilder PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >.WithBuildLevel ( int level)

Sets the maximum depth to traverse when randomizing properties.

Parameters
levelHow far down the rabbit-hole to go
Returns
The builder

Implements PeanutButter.RandomGenerators.IGenericBuilder.

◆ WithDefaultDateTimeKind()

virtual TBuilder PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >.WithDefaultDateTimeKind ( DateTimeKind dateTimeKind)
virtual

Sets the default DateTimeKind to be expected on DateTime properties randomly generated by this builder.

Parameters
dateTimeKindExpected DateTimeKind. Setting Unspecified will result in the default DateTimeKind (Local)
Returns

◆ WithDefaultProp()

void PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >.WithDefaultProp ( Action< TEntity > action)
static

Adds a default property setter, shared amongst all instances of this particular builder type.

Parameters
actionAction to perform on the entity being built, will run before any actions specified on the instance

◆ WithFilledCollections()

virtual TBuilder PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >.WithFilledCollections ( )
virtual

Attempts to fill collections with random data. May fail with stack-overflows on complex, cyclic-referencing objects. Not enabled by default on random builds, use with caution – may lead to a stack overflow with collections which contain items whose types which have collections with items whose types... and so on.

Returns
The current instance of the builder

◆ WithProp() [1/2]

TBuilder PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >.WithProp ( Action< TEntity > action)

Generic method to set a property on the entity.

Parameters
actionAction to run on the entity at build time
Returns
The current instance of the builder

Implements PeanutButter.Utils.IBuilder< TBuilder, TEntity >.

◆ WithProp() [2/2]

TBuilder PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >.WithProp ( ActionRef< TEntity > action)

Generic method to set a property on an entity when that entity is a struct type.

Parameters
actionAction to run on the entity
Returns
The current instance of the builder

Implements PeanutButter.Utils.IBuilder< TBuilder, TEntity >.

◆ WithRandomProps()

virtual TBuilder PeanutButter.RandomGenerators.GenericBuilder< TBuilder, TEntity >.WithRandomProps ( )
virtual

Randomizes all properties on the instance of TEntity being built. This method will use methods from RandomValueGen and may generate new GenericBuilder types for generating more complex properties.

Returns
The current builder instance

The documentation for this class was generated from the following file:
  • source/TestUtils/PeanutButter.RandomGenerators/GenericBuilder.cs