首页 > 解决方案 > 服务引用上的 C# 中的 FakeItEasy

问题描述

我有一个服务参考,其中包含我需要在测试中使用的方法。

服务引用类定义为:

public class MyServiceReference : Clientbase<IMyServiceReference>, IMyServiceReference 
{
   public MyServiceReference()
   {
   }

    ..... methods is then defined
}

从我的测试方法中,我都尝试了

private MyServiceReference myServiceReferenceFake = A.Fake<MyServiceReference>();
// And
private MyServiceReference myServiceReference = new MyServiceReference();

对于这两种情况,构造函数中的崩溃都带有以下消息:

System.InvalidOperationException: Could not find default endpoint element that references contract.

我所需要的只是从该类中的方法中获得调用定义。如何解决?

标签: service-referencefakeiteasy

解决方案


我没有经验Clientbase,我认为这是一个System.ServiceModel.ClientBase<TChannel>,但我可以做一些一般性的评论。

由于您首先尝试伪造 a MyServiceReference,因此我假设您没有测试该类,并且您希望将其用作被测系统的协作者。在这种情况下,您最好的选择是尝试伪造IMyServiceReference. 接口很容易伪造,因为它们不会像伪造类那样带来任何行为或包袱。

如果你觉得你真的需要伪造 a MyServiceReference,那么我们必须应对FakeItEasy最终会调用的事实,MyServiceReference()它将调用 ClientBase<IMyServiceReference>(),其文档

ClientBase<TChannel>使用应用程序配置文件中的默认目标端点初始化类的新实例。

根据您报告的错误,我假设未找到应用程序配置文件或不包含创建MyServiceReference. 当您尝试MyServiceReference直接实例化 a 时,您会遇到相同的错误,这一事实加强了我的信念。

所以我认为你前进的道路要么是尝试伪装,IMyServiceReference要么是提供所需的配置ClientBase<IMyServiceReference>


推荐阅读