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>
需要的配置。
我有一个服务参考,其中包含我需要在测试中使用的方法。
服务参考 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>
需要的配置。