DotNet.Core.Runtime.Faker
Lib para trocar implementações injetadas via DI em tempo de execução nos testes integrados
Através do FakeItEasy
- Lib DotNet.Core.Runtime.Faker.FakeItEasy
- Registrar o faker
var registeredValue = new DateTime(); var factory = new WebApplicationFactory<Startup>().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<Startup>().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()));
Manualmente
- Lib DotNet.Core.Runtime.Faker
Muito parecido com os anteriores, mas sem dependências das libs
factory = new WebApplicationFactory<Startup>().WithWebHostBuilder(builder => builder.ConfigureTestServices(services => { services.AddServiceWithFaker<Clock>(() => new FakeClock()); }));
e
serviceProvider.Change<Clock>(() => new FakeClock());
Exemplos completos: