Autofixture: Incapaz de criar um Fake

Criado em 4 jun. 2018  ·  4Comentários  ·  Fonte: AutoFixture/AutoFixture

Estou atualizando um projeto em que trabalhei alguns anos atrás. No processo, eu atualizei para o mais recente FakeItEasy e AutoFixture.

Tenho 40 testes que estão falhando com um erro semelhante a:

AutoFixture não conseguiu criar uma instância de
FakeItEasy.Fake 1 [System.Collections.Generic.IList 1[AllOverIt.Evaluator.AoiFormulaTokenProcessorContext]] porque a criação falhou inesperadamente com exceção.

Onde a exceção interna relata:
Failed to create fake of type System.Collections.Generic.IList 1 [AllOverIt.Evaluator.AoiFormulaTokenProcessorContext] `

A linha que está falhando é o equivalente a isto:
Fixture.Create<Fake<IList<AoiFormulaTokenProcessorContext>>>();

Como teste, tentei algo mais simples:
Fixture.Create<Fake<IList<int>>>();

Isso não funcionou, então fui olhar para o construtor de AoiFormulaTokenProcessorContext . Se parece com isso:

public AoiFormulaTokenProcessorContext(Func<char, bool, bool> predicate, Func<char, bool, bool> processor)

Após alguma leitura em https://github.com/AutoFixture/AutoFixture/issues/984 , tentei adicionar 'GenerateDelegates' a isto:
Fixture.Customize(new AutoFakeItEasyCustomization {GenerateDelegates = true});

Mas ainda tenho o mesmo problema.

Como esse código estava funcionando, só posso presumir que haja outra alteração importante em algum lugar que ainda não descobri. Espero que alguém possa lançar uma sugestão ou duas na minha direção.

TIA.

question

Comentários muito úteis

Eu entendo. Com as décadas de experiência que tenho, deveria saber melhor - estive no mesmo barco e pergunto exatamente o mesmo. Obrigado pelas respostas.

Todos 4 comentários

Obrigado por compartilhar o cenário!

Como de costume, posso pedir que você forneça um exemplo mínimo, completo e verificável , para que eu possa copiar e colar para investigar profundamente o motivo. O diabo está frequentemente em alguns detalhes, então, mesmo que você tenha descrito bem o cenário, ainda pode acontecer que alguns detalhes não mencionados sejam importantes.

Muito obrigado antecipadamente! :aliviado:

Desculpe, eu deveria ter criado outro (possivelmente um par de) projetos - esperava que minha pergunta pudesse ter gerado algo óbvio antes de sair e fazer isso, pois envolveria a conversão de meus métodos de wrapper em código bruto de AutoFixture / FakeItEasy.

A boa notícia é que parece que eu consertei.

A classe AoiFormulaTokenProcessorContext causando o problema é internal (em outro projeto). Quando eu mudei para public o erro desapareceu.

Eu já tinha [assembly: InternalsVisibleTo("...")] no arquivo AssemblyInfo.cs, mas acabei de lembrar que meus projetos antigos também incluíam [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] .

Não me lembro o que este último faz, mas os erros agora se foram.

Boas notícias, o problema está atenuado: relaxado: foi por isso que pedi a amostra - é sempre mais fácil quando outros fatores são isolados.

Não me lembro o que este último faz, mas os erros agora se foram.

Eu sei: sorria: está relacionado aos Fakes e aos proxies de Castle , usados ​​nos bastidores. Sim, se a classe for interna, isso realmente deve ajudar.

Eu entendo. Com as décadas de experiência que tenho, deveria saber melhor - estive no mesmo barco e pergunto exatamente o mesmo. Obrigado pelas respostas.

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

Questões relacionadas

ploeh picture ploeh  ·  7Comentários

zvirja picture zvirja  ·  3Comentários

josh-degraw picture josh-degraw  ·  4Comentários

Ephasme picture Ephasme  ·  3Comentários

tomasaschan picture tomasaschan  ·  3Comentários