Autofixture: Impossible de créer un faux

Créé le 4 juin 2018  ·  4Commentaires  ·  Source: AutoFixture/AutoFixture

Je suis en train de mettre à jour un projet sur lequel je travaillais il y a quelques années. Dans le processus, j'ai mis à jour les dernières versions de FakeItEasy et AutoFixture.

J'ai 40 tests qui échouent avec une erreur similaire à :

AutoFixture n'a pas pu créer une instance à partir de
FakeItEasy.Fake 1[System.Collections.Generic.IList 1[AllOverIt.Evaluator.AoiFormulaTokenProcessorContext]] car la création a échoué de manière inattendue avec une exception.

Où l'exception interne signale :
Failed to create fake of type System.Collections.Generic.IList 1[AllOverIt.Evaluator.AoiFormulaTokenProcessorContext]`

La ligne qui échoue est l'équivalent de ceci :
Fixture.Create<Fake<IList<AoiFormulaTokenProcessorContext>>>();

Comme test, j'ai essayé quelque chose de plus simple :
Fixture.Create<Fake<IList<int>>>();

Cela n'a pas jeté alors je suis allé voir le constructeur de AoiFormulaTokenProcessorContext . Cela ressemble à ceci :

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

Après quelques lectures sur https://github.com/AutoFixture/AutoFixture/issues/984, j'ai essayé d'ajouter 'GenerateDelegates' à ceci :
Fixture.Customize(new AutoFakeItEasyCustomization {GenerateDelegates = true});

Mais j'ai toujours le même problème.

Comme ce code fonctionnait, je ne peux que supposer qu'il y a un autre changement de rupture quelque part sur lequel je n'ai pas encore trébuché. En espérant que quelqu'un puisse me faire une suggestion ou deux.

TIA.

question

Commentaire le plus utile

Je comprends. Avec les décennies d'expérience que j'ai, je devrais savoir mieux - j'ai été dans le même bateau et je demande exactement la même chose. Merci pour les réponses.

Tous les 4 commentaires

Merci d'avoir partagé le scénario !

Comme d'habitude, puis-je vous demander de fournir un exemple minimal, complet et vérifiable , afin que je puisse le copier-coller pour enquêter en profondeur sur la raison ? Le diable est souvent dans certains détails, donc même si vous avez bien décrit le scénario, il peut toujours arriver que certains détails non mentionnés comptent.

Merci beaucoup d'avance! :soulagé:

Désolé, j'aurais dû créer un autre (peut-être une paire de) projets - j'espérais que ma question aurait pu susciter quelque chose d'évident avant de partir et de le faire car cela aurait impliqué la conversion de mes méthodes d'emballage en code brut AutoFixture / FakeItEasy.

La bonne nouvelle est que je semble l'avoir corrigé.

La classe AoiFormulaTokenProcessorContext à l'origine du problème est internal (dans un autre projet). Lorsque je l'ai changé en public l'erreur disparaît.

J'avais déjà [assembly: InternalsVisibleTo("...")] dans le fichier AssemblyInfo.cs mais je viens de me rappeler que mes anciens projets incluaient également [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] .

Je ne me souviens pas de ce que fait ce dernier mais les erreurs ont maintenant toutes disparu.

Bonne nouvelle, le problème est atténué :relaxed: C'est la raison pour laquelle j'ai demandé l'échantillon - c'est toujours plus facile lorsque d'autres facteurs sont isolés.

Je ne me souviens pas de ce que fait ce dernier mais les erreurs ont maintenant toutes disparu.

Je sais :smile: C'est lié aux faux et aux proxys de Castle , utilisés sous le capot. Oui, si la classe est interne, cela devrait en effet aider.

Je comprends. Avec les décennies d'expérience que j'ai, je devrais savoir mieux - j'ai été dans le même bateau et je demande exactement la même chose. Merci pour les réponses.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

ploeh picture ploeh  ·  7Commentaires

gtbuchanan picture gtbuchanan  ·  3Commentaires

malylemire1 picture malylemire1  ·  7Commentaires

JoshKeegan picture JoshKeegan  ·  6Commentaires

zvirja picture zvirja  ·  4Commentaires