Autofixture: 无法创建假货

创建于 2018-06-04  ·  4评论  ·  资料来源: AutoFixture/AutoFixture

我正在更新我几年前从事的项目。 在这个过程中,我已经更新到最新的 FakeItEasy 和 AutoFixture。

我有 40 个测试失败,错误类似于:

AutoFixture 无法从
FakeItEasy.Fake 1[System.Collections.Generic.IList 1[AllOverIt.Evaluator.AoiFormulaTokenProcessorContext]]因为创建意外失败并出现异常。

内部异常报告的地方:
Failed to create fake of type System.Collections.Generic.IList 1[AllOverIt.Evaluator.AoiFormulaTokenProcessorContext]`

失败的行相当于:
Fixture.Create<Fake<IList<AoiFormulaTokenProcessorContext>>>();

作为测试,我尝试了一些更简单的方法:
Fixture.Create<Fake<IList<int>>>();

这没有抛出所以我去看了AoiFormulaTokenProcessorContext的构造函数。 它看起来像这样:

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

https://github.com/AutoFixture/AutoFixture/issues/984阅读一些内容后,我尝试将“GenerateDelegates”添加到此:
Fixture.Customize(new AutoFakeItEasyCustomization {GenerateDelegates = true});

但我仍然遇到同样的问题。

由于此代码正在运行,我只能假设在某个地方还有另一个我尚未偶然发现的重大更改。 希望有人能以我的方式提出一两个建议。

TIA。

question

最有用的评论

我明白。 凭借我几十年的经验,我应该更清楚——我一直在同一条船上,问同样的问题。 感谢您的回复。

所有4条评论

感谢分享剧情!

像往常一样,我可以请您提供最小,完整和可验证的示例,以便我可以复制粘贴以深入调查原因吗? 魔鬼往往在某些细节上,所以即使你很好地描述了场景,一些未提及的细节仍然很重要。

非常感谢! :松了口气:

抱歉,我应该去创建另一个(可能是一对)项目 - 我希望我的问题在我离开之前可能会提示一些明显的东西,因为它涉及将我的包装方法转换为原始 AutoFixture / FakeItEasy 代码。

好消息是我似乎已经修复了它。

导致问题的AoiFormulaTokenProcessorContext类是internal (在另一个项目中)。 当我将其更改为public ,错误消失了。

我已经在 AssemblyInfo.cs 文件中有[assembly: InternalsVisibleTo("...")] ,但我只记得我的旧项目也包括[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]

我不记得后者做了什么,但错误现在都消失了。

好消息是问题得到了缓解 :relaxed: 这就是我要求样本的原因 - 当其他因素被隔离时,它总是更容易。

我不记得后者做了什么,但错误现在都消失了。

我知道 :smile: 它与 Fakes 和Castle的代理有关,在幕后使用。 是的,如果类是内部的,那么它确实应该有所帮助。

我明白。 凭借我几十年的经验,我应该更清楚——我一直在同一条船上,问同样的问题。 感谢您的回复。

此页面是否有帮助?
0 / 5 - 0 等级