TestDataFramework.dll 5.0.0

dotnet add package TestDataFramework.dll --version 5.0.0
NuGet\Install-Package TestDataFramework.dll -Version 5.0.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TestDataFramework.dll" Version="5.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add TestDataFramework.dll --version 5.0.0
#r "nuget: TestDataFramework.dll, 5.0.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install TestDataFramework.dll as a Cake Addin
#addin nuget:?package=TestDataFramework.dll&version=5.0.0

// Install TestDataFramework.dll as a Cake Tool
#tool nuget:?package=TestDataFramework.dll&version=5.0.0

This is a unit testing tool. It randomizes values in your classes automatically so you don't need to do data entry.

This tool includes the optional ability to write out objects to a database for tests which involve data access.

To get an object value quickly:

    IPopulator memoryPopulator = StaticPopulatorFactory.CreateMemoryPopulator();

    SubjectClass subject = memoryPopulator.Make<SubjectClass>();

    // Or

    // Makes five objects
    IEnumerable<SubjectClass> subjectSet = memoryPopulator.Make<SubjectClass>(5);

The above example uses the in-memory populator.

Defer population of the database with the Bind method.

DON'T use the Make() or MakeAndBind() methods with the SQL Server populator unless you know what you are doing. They will write to the database immediately.


    IPopulator populator = this.factory.CreateSqlClientPopulator(
        @"Data Source=localhost;Initial Catalog=TestDataFramework;Integrated Security=SSPI;",
        mustBeInATransaction: false);

    RecordReference<SqlSubjectClass> result = populator.Add<SqlSubjectClass>().Set(p => p.Text, "ABCD");

    // DB record that is represented by SqlSubjectClass is now populated. 
    // Get a copy of the values written out by accessing the RecordReference:
    SqlSubjectClass subject = result.RecordObject;

The Bind method is available on the IPopulator for in-memory only value generation also.

Go to the Wiki for more.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
5.0.0 610 10/16/2023
4.0.0 513 10/14/2023
3.7.0 1,260 5/21/2022
3.6.2 1,167 5/17/2022
3.6.1 1,186 5/17/2022
3.6.0 1,235 5/17/2022
3.5.3 1,322 9/25/2021
3.5.1 1,625 3/31/2019
3.5.0 1,456 3/3/2019
3.4.1 1,573 2/20/2019
3.4.0 1,527 2/19/2019
3.3.5 1,597 12/1/2018
3.3.4 1,570 11/26/2018
3.3.3 1,467 11/22/2018
3.3.2 1,633 11/5/2018
3.3.1 1,604 11/2/2018
3.3.0 1,491 10/29/2018
3.2.1 1,621 10/25/2018
3.2.0 1,593 10/25/2018
3.1.4 1,637 10/9/2018
3.1.3 1,651 10/9/2018
3.1.2 1,646 10/8/2018
3.1.1 1,608 9/22/2018
3.0.1 1,728 8/26/2018
2.4.0 2,042 1/22/2018
2.2.4 1,716 1/19/2018 1,867 1/12/2018 1,803 12/13/2017
2.2.2 1,877 12/9/2017
2.2.1 1,826 12/4/2017
2.2.0 1,764 11/22/2017
2.1.0 2,198 10/30/2017 1,656 7/11/2017 1,539 7/9/2017 1,450 7/9/2017 1,478 7/9/2017
2.0.4 1,507 7/6/2017
2.0.3 1,496 7/2/2017
2.0.2 1,636 1/9/2017
2.0.1 1,636 12/7/2016

5.0 Removed method BindInATransaction from IPopulator and placed in IDbClientPopulator. Possibly a breaking change, if using BindInATransaction method.
4.0 Upgraded to .NET 6

   3.7.0 Explicit guaranteed value property setting for multiple properties on one output object.
   3.6.2 Adding readme.
   3.6.1 Added license information.
   3.6.0 Support for Fields as well as Properties.
       - SetList and related methods which allow operations on collections fixed.
       - Power function on LargeInteger improved for efficiency.
       - Bug fix: Using SetList and SelectListSet would prevent deferred setter code such as population of primary key.
   - Random instantiated in static context so multiple instances of populator in quick succession don't repeat random sequences.
   - DeleteAll() now sends all Sql commands in a single batch.
           - Added a DeleteAll() method to the populator. Implemented for the Sql Populator.
             Caution: Will throw if foreign key violation because of dependencies on generated
             rows introduced by external processes.
           - DateTimeOffset works with Sql Server DB populator.
           - Expicit foreign key / priamry key property assignment. Useful for foreign key records
             that have multiple foreign keys pointing to different instances of the same table/type.
           - Works with DateTimeOffset
           - Can set max string length in Code Generator.
           - Bug fix: Escaping single quote for explicitly set string property when using the Sql Server populator.
           - Fixed: BindInATransaction method on the Memory populator now calls the existing Bind method.
           It was doing just a no op.              

           - Minor breaking change:
           - 1. Transation options parameter removed from the BindInATransaction method.
           - 2. Transaction options are now set on the Sql populator interface.
           - BindInATransaction method is now available in the IPopulator base interface.
           - Memory populator implements a No Op for it.
           - The pacakge now has the correct updated library. Previous package had an older version.               
           - Array randomizer was calling ToString on a constructed value. Could cause an exception if thrown in ToString.
           - Direct call to Make on the Populators will remove the RecordReference from being tracked before returning.
           - Ability to remove a single Populatable (Record Reference or operable list of) on the populator.
           - Bug fix: array/enumerable directly requested from the populator via Add or Make was throwing.
           - Deferred values now work on nested properties.
           - BindInATransaction method off of the SQL populator returning an IDisposable transaction wrapper object.
             Ie: Using a transaction scope with multuiple DBs such as for EF and TestDataFramework doesn't work in the cloud/Azure.
             This is to fix it.
           - Improvements to bundled TestDataCodeGenerator. Eg: Load all table names in one click.
             MaxAttribute added to numeric columns thatg can have small precision. Eg: The framework will respect maximums
             for randomized values when number of significant digits is small in floating point DB types.
           - long integer arguments to the Min and Max attributes now work with floating point value generation.
           - Added Min and Max attribute handling to all scalar and floating point type handlers.
      No TestDataFramework changes.  TestDataCodeGenerator.exe utility bug fix.
           - ToString on generated objects will not be called in the log messages.
             Some ToString implementations were causing an an exception.
           - Catching exception on SetProperty in the property population code.
           - Attempting constructors from least number of parameters to greatest number of parameters.
           - Swallowing exception if one occurs during constructor invocation on a target object.
           - Added missing overload for GuaranteeByFixedQuantity in the derived OperableLists.
             Was missing overload taking IEnumerable<T> and an explicit fixed quantity
           - Removing state from a service. Allows the same populator object to be used in generation
 of an explicitly set property value.

- Deep setting of properties.

- Deep setting of object graph properties beyond a collection.

- Make an object in one line via Make and BindAndMake.

- Ignore a property (to avoid possible side effects).

- Exclusive range of possible values for a property.

- Take and Skip operations for control of what subsets of a collection explicit setters apply to.

- Better encapsulation. Less public/protected member exposure.
* Bug fixes:
Value type and enum constructor parameters were not being populated.
Unsigned integer properties were causing code to break.

* Bug fix. Constructor finder was finding a constructor for a string with a char array parameter.
Was trying to invoke it. Now circumventing this for value/string types and arrays.
Populating those constructor arguments directly.

* Populator will now attempt to resolve constructor with parameters.
Constructors are attempted from least number of parameters (including zero) to most number of parameters.
* Bug fix. When calling deferred value generator, was including record references that were not populatable, and therefore null.
This was causing a null reference exception when the generator tried to access a method (GetType()) off the null record.
* Ability to ignore properties. Useful to avoid side effects of properties with logic in the setter.
New RecordObjects convenience property on the OperableList<T> result collection type. Instead of
user having to write the LINQ statement to select out the RecordObjects.
* All setters on a property are executed in turn.
* Support for enums

* Bug fix. A combination of explicit/deep property setting and collections in the target object were
causing a null ref exception.

* Fixed bug in deep explicit property setting, same issue as in It's a relatively rare edge case.
Calling Make/BindAndMake on an operable list will call the persistence layer only once for entire list.
Was calling once per element. Will save database round trips when DB populator is used.

* Deep explicit setting of properties.

* Introduction of the ability to get a value immediately by calling Make() or BindAndMake().
This is without needing to call IPopulator.Bind() separately to get values on the whole set
of requested objects.

* Bug Fix. Setting explicit value off of an interface didn't identify the concrete object's
actual (derived) type. Under these conditions, properties weren't being explicitly set
on the object instance.

* Assembly version properties correction.

* Syncing C# and Sql Server DateTime values for the Sql Server populator.
Milliseconds were being truncated on Sql Server but not in C#.

* Extra guard when accessing types from assemblies to be scanned.
Was throwing a ReflectionTypeLoadException for a particular assembly/type.


* Bug fix: Guid / uniqueidentifier in Sql Server now supported.


* Foreign keys can be explicitly set. Framework will not enforce referential integrity for those
properties if so.

Allows you to set a foreign key to null if the matching primary key table isn't in the C# model.
Referential integrity errors on the database server can occur if you introduce them this way.

* Internal methods/members of public facing types are marked as internal (or internal protected)
to reduce user's intellisense noise.

* Skipping assemblies that are not found in the file system during scannig of referenced
assemblies for primary/foreign table class matches. An exception had been occuring for some
assemblies, possibly becasue they were not in the bin folder due to being in the GAC.

* Adding an AppSettings key to explicitly enable or disable log messages. The key is:
"TestDataFramework-EnableLogger". The value to enable logging is "true".


Documentation is up to date on GitHub.

*  Guarantee methods work with primary keys properly.


* RecordReference.Set method fix.

* Guarantee... methods fix.