【发布时间】:2021-03-16 20:49:43
【问题描述】:
环境:.NET 4.5。 FakeItEasy:4.0.0
我正在尝试创建一个假的 Kafka 消费者对象,下面是我使用的语法:
var fakeconsumer = A.Fake<Consumer<Null, string>>((x => x.WithArgumentsForConstructor(() => new Consumer<Null, string>(A.Dummy<IEnumerable<KeyValuePair<string, object>>>(), A.Dummy<IDeserializer<Null>>(), A.Dummy<StringDeserializer>()))));
Kafka客户端的代码在这里:https://github.com/confluentinc/confluent-kafka-dotnet/blob/master/src/Confluent.Kafka/Consumer.cs
如您所见,我正在使用构造函数所需的正确参数调用 Fake 调用。但是我不断收到以下错误消息:“没有构造函数与传递的构造函数参数匹配。”。
非常感谢任何帮助。
谢谢
编辑:
在 C:\projects\fakeiteasy\src\FakeItEasy\Creation\CastleDynamicProxy\CastleDynamicProxyGenerator.cs 中的 FakeItEasy.Creation.CastleDynamicProxy.CastleDynamicProxyGenerator.CreateProxyGeneratorResult(类型 typeOfProxy,ProxyGenerationOptions 选项,IEnumerable
1 additionalInterfacesToImplement, IEnumerable1 argumentsForConstructor,IFakeCallProcessorProvider fakeCallProcessorProvider):第 125 行 在 C:\projects\fakeiteasy\src\FakeItEasy\Creation\CastleDynamicProxy\CastleDynamicProxyGenerator.cs:line 86 在 C:\projects\fakeiteasy\src\FakeItEasy\Creation\DefaultFakeAndDummyManager.cs:line 41 在 C:\projects\fakeiteasy\src\FakeItEasy\A.cs:line 47 中的 FakeItEasy.A.Fake[T](Action`1 optionsBuilder) 处
【问题讨论】:
-
以后,我建议阅读整个错误信息。它可以完全避免提问。在提出问题时,最好包含整个错误,因为它确实可以帮助回答者。请参阅stackoverflow.com/help/how-to-ask 了解更多信息。
-
哦,顺便说一句,这没有记录,我可以说,但是 FakeItEasy 在制作 Fake 时会首先尝试使用无参数构造函数,如果没有,将按顺序使用构造函数从大多数参数到最少。它将提供 Dummies 作为构造函数参数。由于 Consumer 没有无参数构造函数,因此您的原始代码等效于
var fakeconsumer = A.Fake<Consumer<Null, string>>()。当然,可能总是有理由明确首选构造函数,即使您不需要指定参数,但您需要这样做(请参阅我的回答)。
标签: c# unit-testing apache-kafka kafka-consumer-api fakeiteasy