【问题标题】:Fakeiteasy issue mocking soapclient模拟soapclient的Fakeiteasy问题
【发布时间】:2015-07-23 08:10:04
【问题描述】:

我正在尝试通过使用NUnitfakeiteasy 的单元测试来覆盖我的业务逻辑。但我突然坚持使用 fakeiteasy 对 Soap 客户端进行伪造调用。我正在尝试做下一件事

var myFakedSoapClient = A.Fake<SomeSoapClient>();
var myCustomServiceWhichUsesThatSoapClient = new MyService(myFakedSoapClient);
myCustomServiceWhichUsesThatSoapClient.CallDoSomething();   
myFakedSoapClient.CallsTo(e=>e.DoSomething(A<string>.Ignored)).MustHaveHappened();

但在我试图伪造 SoapClient 的第一行中,它只是卡住并开始消耗越来越多的内存。它没有显示任何异常,它只是运行该行直到超时。

我想念什么?

感谢任何预付款。

【问题讨论】:

  • 什么是SomeSoapClient?我对这门课不熟悉。
  • 这是一个由wsdl自动生成的soapclient。
  • 我不知道如何提供帮助。 FakeItEasy 可以伪造许多类(尽管我建议尽可能伪造接口——意外更少),因此如果不了解被伪造的类的更多信息,就无法重现问题,而且推理变得相当困难。
  • 我很难相信SoapClient 与您的业务逻辑有任何关系。我会确保您将业务逻辑组件与集成组件隔离开来。调用 SOAP Web 服务的东西是一个集成组件,您可以对其应用适当的测试策略。事实上,如果你尽可能地将 SOAP 客户端的使用隔离到最薄的包装器中,那么对它进行单元测试就没有什么价值了,所以伪造 SoapClient 的需求就会消失。

标签: c# unit-testing tdd nunit fakeiteasy


【解决方案1】:

包括假电话

myFakedSoapClient.CallsTo(e=>e.DoSomething(A<string>.Ignored)).WithAnyArgumemen().Returns(expectedfakeobject);

在实际函数调用之前

var myCustomServiceWhichUsesThatSoapClient = new MyService(myFakedSoapClient);

类似的东西

var myFakedSoapClient = A.Fake<SomeSoapClient>();
var myCustomServiceWhichUsesThatSoapClient = new MyService(myFakedSoapClient);
myFakedSoapClient.CallsTo(e=>e.DoSomething(A<string>.Ignored)).WithAnyArgumemen().Returns(expectedfakeobject);
myCustomServiceWhichUsesThatSoapClient.CallDoSomething();   
myFakedSoapClient.CallsTo(e=>e.DoSomething(A<string>.Ignored)).MustHaveHappened();

【讨论】:

    猜你喜欢
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多