Autofixture: Fake kann nicht erstellt werden

Erstellt am 4. Juni 2018  ·  4Kommentare  ·  Quelle: AutoFixture/AutoFixture

Ich bin dabei, ein Projekt zu aktualisieren, an dem ich vor einigen Jahren gearbeitet habe. Dabei habe ich auf das Neueste von FakeItEasy und AutoFixture aktualisiert.

Ich habe 40 Tests, die mit einem ähnlichen Fehler wie folgt fehlschlagen:

AutoFixture konnte keine Instanz erstellen aus
FakeItEasy.Fake 1[System.Collections.Generic.IList 1[AllOverIt.Evaluator.AoiFormulaTokenProcessorContext]] weil die Erstellung mit Ausnahme unerwartet fehlgeschlagen ist.

Wo die innere Ausnahme meldet:
Failed to create fake of type System.Collections.Generic.IList 1[AllOverIt.Evaluator.AoiFormulaTokenProcessorContext]`

Die fehlgeschlagene Zeile entspricht der folgenden:
Fixture.Create<Fake<IList<AoiFormulaTokenProcessorContext>>>();

Als Test habe ich etwas einfacheres versucht:
Fixture.Create<Fake<IList<int>>>();

Dies wurde nicht ausgelöst, also habe ich mir den Konstruktor von AoiFormulaTokenProcessorContext . Es sieht aus wie das:

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

Nach einigem Lesen unter https://github.com/AutoFixture/AutoFixture/issues/984 habe ich versucht, 'GenerateDelegates' hinzuzufügen:
Fixture.Customize(new AutoFakeItEasyCustomization {GenerateDelegates = true});

Aber ich habe immer noch das gleiche Problem.

Da dieser Code funktionierte, kann ich nur davon ausgehen, dass es irgendwo eine weitere Breaking Change gibt, über die ich noch nicht gestolpert bin. Ich hoffe, jemand kann mir ein oder zwei Vorschläge unterbreiten.

TIA.

question

Hilfreichster Kommentar

Ich verstehe. Mit meiner jahrzehntelangen Erfahrung sollte ich es besser wissen - ich war im selben Boot und frage genau das gleiche. Danke für die Antworten.

Alle 4 Kommentare

Danke für das Teilen des Szenarios!

Darf ich Sie wie üblich bitten, ein minimales, vollständiges und überprüfbares Beispiel bereitzustellen, damit ich es kopieren und einfügen kann, um den Grund gründlich zu untersuchen? Der Teufel steckt oft in einigen Besonderheiten. Selbst wenn Sie das Szenario gut beschrieben haben, kann es dennoch vorkommen, dass einige nicht erwähnte Details wichtig sind.

Vielen Dank im Voraus! :erleichtert:

Entschuldigung, ich hätte ein anderes (möglicherweise Paar) Projekte erstellen sollen - ich hatte gehofft, dass meine Frage etwas Offensichtliches ausgelöst hat, bevor ich losging und dies tat, da meine Wrapper-Methoden in rohen AutoFixture / FakeItEasy-Code umgewandelt worden wären.

Die gute Nachricht ist, dass ich es anscheinend behoben habe.

Die Klasse AoiFormulaTokenProcessorContext , die das Problem verursacht, ist internal (in einem anderen Projekt). Wenn ich es in public geändert habe,

Ich hatte bereits [assembly: InternalsVisibleTo("...")] in der Datei AssemblyInfo.cs, aber ich erinnerte mich nur, dass meine alten Projekte auch [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] enthielten.

Ich erinnere mich nicht, was letzteres tut, aber die Fehler sind jetzt alle weg.

Gute Nachrichten, das Problem ist gemildert :entspannt: Deshalb habe ich nach der Stichprobe gefragt - es ist immer einfacher, wenn andere Faktoren isoliert sind.

Ich erinnere mich nicht, was letzteres tut, aber die Fehler sind jetzt alle weg.

Ich weiß :smile: Es hängt mit den Fakes und den Proxys von Castle , die unter der Haube verwendet werden. Ja, wenn Klasse intern ist, dann sollte es tatsächlich helfen.

Ich verstehe. Mit meiner jahrzehntelangen Erfahrung sollte ich es besser wissen - ich war im selben Boot und frage genau das gleiche. Danke für die Antworten.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

Ephasme picture Ephasme  ·  3Kommentare

tiesmaster picture tiesmaster  ·  7Kommentare

ploeh picture ploeh  ·  3Kommentare

ecampidoglio picture ecampidoglio  ·  7Kommentare

josh-degraw picture josh-degraw  ·  4Kommentare