gpt4 book ai didi

c# - 在没有 OperationContext 的情况下创建可测试的 WCF 服务

转载 作者:可可西里 更新时间:2023-11-01 08:46:28 25 4
gpt4 key购买 nike

我已经实现了一个订阅/发布(为了我自己的乐趣)WCF 服务,它工作得相当好。就像我看到的所有博客和书籍一样,它们都使用 OperationContext 来获取客户端回调地址。阅读了一下,由于很多人说不要使用 OperationContext,我发现自己无法创建适当的单元测试。但是我一直找不到替代方案。我想 subscribe 方法可以接受一个参数来提供自己的地址?从集成测试的角度来看,我可以看到代码是可测试的,但不能用于单元测试,因为 OperationContext 始终为 null。

在不使用 OperationContext 订阅我的服务时,如何获取客户端端点?

顺便提一下,在展示代码示例时,考虑到测试的良好 WCF 资源在哪里?有大量的博客在不提供示例测试用例的情况下重申相同的代码。

谢谢。

最佳答案

Microsoft 开发人员非常喜欢 sealedstatic 关键字(以及 internal),他们讨厌 virtual。由于标准测试方法和框架通常不起作用。您有两个选择:

  1. 在自定义类中包装对 OperationContext 的访问并将该类的实例注入(inject)您的服务。这将涉及额外的工作,因为您需要在服务之外的某个地方进行注入(inject)。例如,构造函数注入(inject)将需要自定义 IInstanceProvider
  2. 使用更强大的测试框架。检查Moles framework它能够拦截调用并重定向它们。这将启用“模拟”密封类和静态方法/属性。

另一种方法是简单地重构您的代码。将服务中的所有业务逻辑移至单独的可测试业务类中,并让服务仅参与集成测试。服务更像是基础设施,并不是所有的东西都真正需要单元测试。集成/端到端/行为测试也是测试和有效的方法。

关于c# - 在没有 OperationContext 的情况下创建可测试的 WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5365570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com