FakeItEasy 在 C# 中的服务引用

FakeItEasy in C# on a servicereference

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

服务参考 class 定义为:

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.

我所需要的只是从 class 中的一个方法中定义一个 callto 定义。 如何解决?

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

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

如果你觉得你真的需要伪造一个 MyServiceReference,那么我们必须面对这样一个事实,即 FakeItEasy 最终会调用 MyServiceReference(),而后者又会调用 ClientBase<IMyServiceReference>()documentation

Initializes a new instance of the ClientBase<TChannel> class using the default target endpoint from the application configuration file.

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

所以我认为您的前进方向是尝试伪造 IMyServiceReference 或提供 ClientBase<IMyServiceReference> 需要的配置。