代码之家  ›  专栏  ›  技术社区  ›  Andrew M

WSDL.exe文件-生成接口以及具体的类,以便以后容易伪造/模拟

  •  6
  • Andrew M  · 技术社区  · 14 年前

    有没有可能WSDL.exe文件在生成web服务的代理时,是生成接口还是生成具体类?

    我们正在使用来自ASP.Net应用程序,并使用WSDL.exe文件一切都很好。

    我可以手动创建一个接口(使用resharper)并编辑类,但是如果第三方更改了他们的WSDL/web服务,我或我的继任者也将不得不手动编辑接口和自动生成的类,这似乎不是一个好主意。

    伪造或嘲笑这项服务最优雅的方式是什么?我应该把赝品放在商业项目里吗?我应该手动编辑文件并创建一个界面吗?我应该做些完全不同的事吗?

    3 回复  |  直到 14 年前
        1
  •  7
  •   Andrew M    9 年前

    是的,在菲利普的回答的提示下,我开始了一个,可能已经想出了一个有效的解决方案。使用WSDL.exe文件我生成了接口(使用/si开关)

    我现在可以创建实现接口的其他类(mock或fake),并替换它们而不是“shim”类。

    好吧,我已经在这方面做了进一步的研究,除非有一些复杂的情况,它是有效的。

    第一个重要的问题是代理类仍然标记为“internal”,因此派生(适配器/填充)类也必须是内部的。如果您将一个工厂类放入业务项目/程序集中,而这个工厂类是新的代理类,并将它们作为接口返回,那么这就不是问题了。

    编辑: 在测试和开发我们的外观时,这对我来说仍然很好。自从在接口后面获得代理之后,我还创建了一个logging decorator类,该类捕获大量示例调用,以便在第三方服务器脱机时使用调试。

    我在这里更详细地写了我所做的事情: http://www.flowerchild.org.uk/archive/2010/09/21/mocking-or-faking-or-maybe-stubbing-a-wsdl-exe-soap.html

        2
  •  4
  •   Philip Rieck    14 年前

    /serverinterface /si 切换以获取wsdl中每个绑定的接口。这是为了从wsdl文档中获得服务器端的框架,但是如果我正确理解了这个问题,那么这些接口应该会让您上路。

    编辑 /国际单位制 切换可能根本不会给你想要的东西。

        3
  •  1
  •   David Laing    14 年前

    我总是发现这些生成的类太大,不容易模拟(太多的方法/属性)。

    相反,创建一个Facade或Repository,它只实现您需要的调用,并用您关心的属性将DTO传递回样式对象。

    针对真正的Webservice编写一些简单的集成测试,然后在其余测试中模拟更简单的Facade。