An open API service indexing awesome lists of open source software.

https://github.com/ffmathy/fluffyspoon.testing


https://github.com/ffmathy/fluffyspoon.testing

Last synced: 4 months ago
JSON representation

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"
```