Autofixture: Pergunta: configurar simulações de dependências aninhadas com AutoMoqCustomization

Criado em 15 abr. 2016  ·  5Comentários  ·  Fonte: AutoFixture/AutoFixture

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; }
    }

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 aparelho

Existem duas limitações. Não configura:

  • métodos com parâmetros ref
  • métodos genéricos

Mais informações na parte inferior da folha de dicas .

Todos 5 comentários

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:

  • métodos com parâmetros ref
  • métodos genéricos

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

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

tiesmaster picture tiesmaster  ·  7Comentários

malylemire1 picture malylemire1  ·  7Comentários

tomasaschan picture tomasaschan  ·  3Comentários

gtbuchanan picture gtbuchanan  ·  3Comentários

ecampidoglio picture ecampidoglio  ·  7Comentários