ActivateAnything 0.3.0
An `AnythingActivator` will make an extreme effort to find and instantiate a concrete class
which is assignable to a `Type`, whether or not the Type is concrete, whether or not the
Type has constructor dependencies, whether or not a suitable concrete subtype is found
in any currently loaded `Assembly`.
The attempt to find and instantiate suitable Types is rule-driven.
There are three kinds of `IActivateAnythingRule`.
- `IFindTypeRule` provides rules for where to look for candidate concrete subtypes of an abstract type
- `IActivateInstanceRule` simply returns an instance of a concrete type.
- `IChooseConstructorRule` rules for how to choose between constructors when a concrete `Type` has been chosen.
The <em>extremity</em> of the effort lies in its recursive attempt to find and construct the <em>dependencies</em>.
Install-Package ActivateAnything -Version 0.3.0
dotnet add package ActivateAnything --version 0.3.0
<PackageReference Include="ActivateAnything" Version="0.3.0" />
paket add ActivateAnything --version 0.3.0
#r "nuget: ActivateAnything, 0.3.0"
ActivateAnything
Activate.New<T>()
…will make an extreme effort to find and instantiate a concrete class which is assignable to a Type
, whether or not the Type is concrete, whether or not the Type has constructor dependencies, whether or not a suitable concrete subtype is found in any currently loaded Assembly
.
The attempt to find and instantiate suitable Types is driven by three kinds of IActivateAnythingRule
.
IActivateInstanceRule
simply returns an instance of a concrete type.IFindTypeRule
provides rules for where to look for candidate concrete subtypes of an abstract typeIChooseConstructorRule
rules for how to choose between constructors when a concreteType
has been chosen.
The extremity of the effort lies in its recursive attempt to find and construct the dependencies.
The default ruleset will
- Search first the currently executing assembly, then its references, then its base directory, then the current working directory
- Prefer constructors with more parameters over constructors with fewer.
Customise or replace the default ruleset with the provided rules or custom rules.
Example Usage
See FixtureBase : reduce the cost of Unit Testing by automating setup and the injection of fakes.
ActivateAnything
Activate.New<T>()
…will make an extreme effort to find and instantiate a concrete class which is assignable to a Type
, whether or not the Type is concrete, whether or not the Type has constructor dependencies, whether or not a suitable concrete subtype is found in any currently loaded Assembly
.
The attempt to find and instantiate suitable Types is driven by three kinds of IActivateAnythingRule
.
IActivateInstanceRule
simply returns an instance of a concrete type.IFindTypeRule
provides rules for where to look for candidate concrete subtypes of an abstract typeIChooseConstructorRule
rules for how to choose between constructors when a concreteType
has been chosen.
The extremity of the effort lies in its recursive attempt to find and construct the dependencies.
The default ruleset will
- Search first the currently executing assembly, then its references, then its base directory, then the current working directory
- Prefer constructors with more parameters over constructors with fewer.
Customise or replace the default ruleset with the provided rules or custom rules.
Example Usage
See FixtureBase : reduce the cost of Unit Testing by automating setup and the injection of fakes.
Release Notes
ChangeLog
---------
0.3.0 AnythingActivator.Instances as well as Rules. Breaking: refactored constructors & FixtureBase startup
0.2.2 FixtureBase
0.2.1.0 ActivateInstance Rule can activate a Func<Type> as well as a Type
0.2.0.0 Expose LastActivationTree and LastErrorList after a call to New()
0.1.0.2 fix non-public constructors. ChooseConstructorWith(Most|Fewest)ParametersAttribute.PreferPublic defaults to true.
0.1.0.1 ActivateAnything first release.
Dependencies
-
.NETFramework 4.5
- No dependencies.
-
.NETStandard 2.0
- No dependencies.
Used By
NuGet packages (1)
Showing the top 1 NuGet packages that depend on ActivateAnything:
Package | Downloads |
---|---|
FixtureBase
Don't spend hours writing code to mock a dozen dependencies, and more hours debugging it. Just write your test code, and let FixtureBase create the dependencies for you.
FixtureBase constructs your UnitUnderTest to test your codebase end-to-end, with external dependencies auto-faked and automatically injected in just the right place; even constructor dependencies that are several layers deep.
You just write your tests:
```
public class FixtureBaseExample : FixtureBaseWithDbAndHttpFor<AUseCase>
{
[Fact]
public void UUTSendsDataToDb()
{
var newDatum = new Datum{Id=99, Name="New!" };
UnitUnderTest.InsertDb(newDatum);
Db.ShouldHaveInserted("Data",newDatum);
}
[Fact]
public void UUTreturnsDataFromDbQuerySingleColumn()
{
var dbData = new[] { "row1", "row2", "row3", "row4"};
Db.SetUpForQuerySingleColumn(dbData);
UnitUnderTest.FromDbStrings().ShouldEqualByValue(dbData);
}
[Fact]
public async Task UUTGetHttpReturnsDataFromService()
{
var contentFromService = "IGotThis!";
HttpClient
.Setup(m => true)
.Returns(new HttpResponseMessage(HttpStatusCode.OK) {Content = new StringContent(contentFromService)});
(await UnitUnderTest.GetHttp()).ShouldBe(contentFromService);
HttpClient.Verify(x=>x.Method==HttpMethod.Get);
}
}
```
The included examples demonstrate FixtureBases for applications which depend on Ado.Net IDbConnections and on HttpClient network connections.
- To create your own FixtureBase with your own preferred Fakes, see the
examples at
<https://github.com/chrisfcarroll/ActivateAnything/blob/master/FixtureBase/FixtureExample.cs.md>
- For how it's done, see
<https://github.com/chrisfcarroll/ActivateAnything/blob/master/FixtureBase/FixtureBase.cs>
Construction is done by
- [ActivateAnything](https://www.nuget.org/packages/ActivateAnything)
Faking is done by
- [TestBase.AdoNet](https://www.nuget.org/packages/TestBase.AdoNet)
- [TestBase.HttpClient.Fake](https://www.nuget.org/packages/TestBase.HttpClient.Fake)
For more tools focussed on cutting the cost of unit testing, see also:
- [TestBase](https://www.nuget.org/packages/TestBase)
- [TestBase.AspNetCore.Mvc](https://www.nuget.org/packages/TestBase.AspNetCore.Mvc)
- [TestBase-Mvc](https://www.nuget.org/packages/TestBase-Mvc)
- [TestBase.AdoNet](https://www.nuget.org/packages/TestBase.AdoNet)
- [TestBase.HttpClient.Fake](https://www.nuget.org/packages/TestBase.HttpClient.Fake)
- [Serilog.Sinks.ListOfString](https://www.nuget.org/packages/Serilog.Sinks.Listofstring)
- [Extensions.Logging.ListOfString](https://www.nuget.org/packages/Extensions.Logging.ListOfString)
|
GitHub repositories
This package is not used by any popular GitHub repositories.