Lidando com inconsistências de criação de espécimes entre o AutoFixture e o Moq
Eu estou usando AutoMoqCustomization em minhas convenções de teste.
Considere o código abaixo. Tudo funciona muito bem até eu adicionar um construtor a uma das classes concretas. Quando eu faço, fico "não consegui encontrar um construtor sem parâmetros". Sabemos que o AutoFixture não tem um problema com o construtor porque ele me forneceu o objeto de testeone
que provou ser atribuível a partir de IThings ... não falha lá. Então deve ser moq.
Isso faz algum sentido porque eu suponhobuilder
foi gerado por moq e passou para oGetCommands
método. Então, eu acho que posso ver que o controle foi passado de AutoFixture para moq nesse ponto.
Isso cuida do porquê, mas o que devo fazer sobre isso? Existe uma maneira de instruir moq sobre como lidar com oThingOne
ou existe uma maneira de instruir AutoFixture para ignorar moq paraIThingBuilders
e em vez disso, fazer algo Fixtury?
public class TestClass
{
public interface IThingBuilders
{
T1 Build<T1>() where T1 : IThings;
}
public interface IThings
{
}
public class ThingOne : IThings
{
public ThingOne(string someparam)
{
}
}
public class ThingTwo : IThings
{
}
public class SomeClass
{
public List<IThings> GetCommands(IThingBuilders builder)
{
var newlist = new List<IThings>();
newlist.Add(builder.Build<ThingOne>());
newlist.Add(builder.Build<ThingTwo>());
return newlist;
}
}
[Theory, BasicConventions]
public void WhyCannotInstantiateProxyOfClass(ThingOne one, ThingTwo two, IThingBuilders builder, SomeClass sut)
{
Assert.IsAssignableFrom<IThings>(one);
Assert.IsAssignableFrom<IThings>(two);
var actual = sut.GetCommands(builder);
Assert.Equal(1, actual.OfType<ThingOne>().Count());
Assert.Equal(1, actual.OfType<ThingTwo>().Count());
}
}