Tentei usar AutoMoqCustomization
para simular automaticamente um gráfico de objeto com dependências aninhadas e os resultados não são os que eu esperava. Aqui está o código de teste, alguém pode me dizer por que, após congelar um Mock<IObject>
há uma situação em que outro IObject
criado pelo Moq é criado pelo aparelho?
[TestClass]
public class MyTestClass
{
[TestMethod]
public void Test()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var objMock = fixture.Freeze<Mock<IObject>>();
var sut = fixture.Create<Dependant2>();
sut.Obj.Should().BeSameAs(objMock);
}
}
public interface IObject { }
public interface IDependant { IObject Obj { get; } }
public class MyObject : IObject { }
public class Dependant2
{
public Dependant2(IDependant dependant)
{
Obj = dependant.Obj;
}
public IObject Obj { get; }
}
O AutoMoqCustomization
cria objetos fictícios, mas não os configura.
Se você quiser que os membros do mock sejam configurados, considere usar AutoConfiguredMoqCustomization
. Ele vai a) definir as propriedades definíveis públicas do mock eb) métodos de configuração / indexadores para retornar (e memorizar) valores gerados lentamente pelo aparelho
Existem duas limitações. Não configura:
ref
Mais informações na parte inferior da folha de dicas .
Obrigado pela resposta rápida! Eu tentei AutoConfiguredMoqCustomization
com método em vez de propriedade em IDependant
e respeitou a instância congelada. Existe uma maneira de fazer com que os imóveis não definíveis também sejam respeitados? Com o Moq, é possível configurar um getter de propriedade mesmo quando não há setter.
Na verdade, deixa pra lá. Ele também configura propriedades get-only, meu mal.
Também me lembro de um bug no Moq que interferia no AutoMoq, tornando-o incapaz de configurar as propriedades get-only. Pelo menos quando eu olhei para isso, você tinha que usar o Moq versão 4.2.1409.1722 ou inferior (detalhes em # 434). Talvez o bug tenha sido corrigido na versão mais recente do Moq, não tenho certeza.
Tentei a versão mais alta do Moq, inferior a 4.2.1409.1722, e você está correto, também funciona para propriedades get-only. O bug do Moq não foi corrigido em uma versão mais recente, desde que tentei com a mais recente. Muito obrigado por sua ajuda
Duplicados http://stackoverflow.com/q/36656741/126014
Comentários muito úteis
O
AutoMoqCustomization
cria objetos fictícios, mas não os configura.Se você quiser que os membros do mock sejam configurados, considere usar
AutoConfiguredMoqCustomization
. Ele vai a) definir as propriedades definíveis públicas do mock eb) métodos de configuração / indexadores para retornar (e memorizar) valores gerados lentamente pelo aparelhoExistem duas limitações. Não configura:
ref
Mais informações na parte inferior da folha de dicas .