Pacote | Versão | Downloads |
---|---|---|
Moq | ||
FakeItEasy | ||
Manual |
Read this in other language: English
Lib para trocar implementações injetadas via DI em tempo de execução nos testes integrados
> dotnet add package Lambda3.DotNet.Core.Runtime.Faker.Moq
> dotnet add package Lambda3.DotNet.Core.Runtime.Faker.FakeItEasy
> dotnet add package Lambda3.DotNet.Core.Runtime.Faker
Através do FakeItEasy
- Lib DotNet.Core.Runtime.Faker.FakeItEasy
- Registrar o faker
var registeredValue = new DateTime();
var factory = new WebApplicationFactory<Program>().WithWebHostBuilder(builder =>
builder.ConfigureTestServices(services =>
{
services.AddServiceWithFaker<Clock>(faker => A.CallTo(() => faker.Now()).Returns(registeredValue));
}));
var serviceProvider = factory.Services;
- Mudar implementação
serviceProvider.Change<Clock>(faker => A.CallTo(() => faker.Now()).Returns(new DateTime()));
- Receber novo valor
serviceProvider.GetService<Clock>().Now();
Deve retornar valor informado no change =)
- Limpar implementação para não influenciar em outros testes
serviceProvider.ResetAllChanges();
Através do Moq
- Lib DotNet.Core.Runtime.Faker.Moq
Muito parecido com o FakeItEasy, mas com a sintaxe do moq
factory = new WebApplicationFactory<Program>().WithWebHostBuilder(builder =>
builder.ConfigureTestServices(services =>
{
services.AddServiceWithFaker<Clock>(mock => mock.Setup(x => x.Now()).Returns(registeredValue));
}));
e
serviceProvider.Change<Clock>(mock => mock.Setup(x => x.Now()).Returns(new DateTime()));
- Lib DotNet.Core.Runtime.Faker
Muito parecido com os anteriores, mas sem dependências das libs
factory = new WebApplicationFactory<Program>().WithWebHostBuilder(builder =>
builder.ConfigureTestServices(services =>
{
services.AddServiceWithFaker<Clock>(() => new FakeClock());
}));
e
serviceProvider.Change<Clock>(() => new FakeClock());
Exemplos completos: