Usando autofixture em meus testes de integração de dados para criar proxies
Eu estou tentando escrever um conjunto de testes de integração de banco de dados para o meu domínio que usa o Entity Framework. Eu preferiria autofixir objetos em alguns cenários. Minha sintaxe ideal seria algo como
[TestMethod]
public void AutofixtureMyEntityEntity()
{
var fixture = new Fixture();
fixture.Customize<MyEntity>(
c => c.FromFactory<MyDbContext>(ctx => ctx.Set<MyEntity>().Create()));
using (var context = new MyDbContext())
{
fixture.Inject(context);
var entity = fixture.CreateAnonymous<MyEntity>();
context.Set<MyEntity>().Add(entity);
context.SaveChanges();
}
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public void AutoFixtureMyEntityEntityWithoutInjection()
{
var fixture = new Fixture();
fixture.Customize<MyEntity>(
c => c.FromFactory<MyDbContext>(ctx => ctx.Set<MyEntity>().Create()));
using (var context = new MyDbContext())
{
var entity = fixture.CreateAnonymous<MyEntity>();
context.Set<MyEntity>().Add(entity);
context.SaveChanges();
}
}
Obviamente, isso não está funcionando desdeCreateAnonymous()
não está esperando o parâmetro de entrada para a fábrica. Eu só posso supor que eu tenho uma compreensão defeituosa do queFromFactory()
fornece. Embora o comentário seja lido,
/// Specifies that a specimen should be created in a particular way, using a single input
/// parameter for the factory.
Depois de lerploehs blogEstou um pouco mais confuso sobre como essas peças interagem umas com as outras.
A instância deMyDbContext
durante a invocação de fábrica não é a instância que passei paraInject()