https://github.com/ffmathy/fluffyspoon.testing
https://github.com/ffmathy/fluffyspoon.testing
Last synced: 4 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/ffmathy/fluffyspoon.testing
- Owner: ffMathy
- License: mit
- Created: 2017-04-16T12:32:56.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2021-07-14T04:44:22.000Z (almost 5 years ago)
- Last Synced: 2024-05-22T21:59:14.781Z (about 2 years ago)
- Language: C#
- Size: 50.8 KB
- Stars: 1
- Watchers: 3
- Forks: 1
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Need practise in making a system testable and writing tests? See: https://github.com/ffMathy/testability-kata
# FluffySpoon.Testing.Autofake
The `FluffySpoon.Testing.Autofake` package makes it easy for you to automatically register all your class dependencies as fakes, resulting in a setup that is easier to use with Test Driven Development (TDD) and more flexible to change in your code.
## Sample using `Autofac` for IOC/DI and `NSubstitute` for faking
```csharp
var containerBuilder = new ContainerBuilder();
var faker = new Autofaker();
faker.UseNSubstitute();
faker.UseAutofac(builder);
//MyClassThatIWantToTest contains two constructor parameters of types IDependency1
//and IDependency2 respectively. these two dependencies will be registered as
//single-instance fakes in the IOC container.
faker.RegisterFakesForConstructorParameterTypesOf();
var container = builder.Build();
//this instance is not faked out, because it is the class that we want to test
var myClassThatIWantToTest = container.Resolve();
//these instances are fakes and single-instance, because they are constructor
//parameters of MyClassThatIWantToTest.
var fakeDependency1 = container.Resolve();
var fakeDependency2 = container.Resolve();
```
## Dependency Injection and Inversion of Control systems
### Autofac
**Package:** `FluffySpoon.Testing.Autofake.Autofac`
```csharp
var builder = new ContainerBuilder();
var faker = new Autofaker();
faker.UseAutofac(builder);
faker.RegisterFakesForConstructorParameterTypesOf();
var container = builder.Build();
```
### Microsoft's Dependency Injection (used in ASP .NET Core and .NET Core)
**Package:** `FluffySpoon.Testing.Autofake.MicrosoftDependencyInjection`
```csharp
var serviceCollection = new ServiceCollection();
var faker = new Autofaker();
faker.UseMicrosoftDependencyInjection(serviceCollection);
faker.RegisterFakesForConstructorParameterTypesOf();
var serviceProvider = serviceCollection.BuildServiceProvider();
```
### StructureMap
**Package:** `FluffySpoon.Testing.Autofake.StructureMap`
```csharp
var container = new Container();
var faker = new Autofaker();
faker.UseStructureMap(container);
faker.RegisterFakesForConstructorParameterTypesOf();
```
### Lamar
**Package:** `FluffySpoon.Testing.Autofake.Lamar`
```csharp
var container = new Container(serviceRegistry => {
var faker = new Autofaker();
faker.UseLamar(serviceRegistry);
faker.RegisterFakesForConstructorParameterTypesOf();
});
```
## Faking frameworks
### NSubstitute
**Package:** `FluffySpoon.Testing.Autofake.NSubstitute`
```csharp
var faker = new Autofaker();
faker.UseNSubstitute();
...
var fakeClassDependency = container.Resolve();
fakeClassDependency.SayFoo().Returns("fakefoo");
fakeClassDependency.SayFoo(); //returns "fakefoo"
```
### FakeItEasy
**Package:** `FluffySpoon.Testing.Autofake.FakeItEasy`
```csharp
var faker = new Autofaker();
faker.UseFakeItEasy();
...
var fakeClassDependency = container.Resolve();
A.CallTo(() => fakeClassDependency.SayFoo()).Returns("fakefoo");
fakeClassDependency.SayFoo(); //returns "fakefoo"
```
### Moq
**Package:** `FluffySpoon.Testing.Autofake.Moq`
```csharp
var faker = new Autofaker();
faker.UseMoq();
...
var fakeClassDependencyMock = container.Resolve>();
fakeClassDependencyMock.Setup(x => x.SayFoo()).Returns("fakefoo");
var fakeClassDependency = container.Resolve();
fakeClassDependency.SayFoo(); //returns "fakefoo"
```