2012-04-02 37 views

回答

-1

你应该有两套测试:

  1. 单元测试这些接口为你服务
  2. 集成测试(也将覆盖接口的定制实现,但在全面,实时的使用设置场景)

单元测试的实现应该像单元测试一样进行。这真的会缩小到验证这些自定义实现的功能。简单的旧单元测试。

但是,请注意,有两个主要障碍,成功的单元测试等WCF位实现:

  • WCF上下文的头(或单独干脆把上下文)将很难在嘲讽方面的工作,如它们来自静态类(OperationContext.Current
  • 惩戒某些方法参数的可能是不可能的,因为它们被密封(例如InstanceContext)或相当复杂的

当然,所有这可以通过适当的技术和工具的使用来克服:

  • 对于密封类,嘲讽将无法正常工作,您只需创建实例(用工具帮助像AutoFixture),并设置对象/手动的依赖关系图(可能会耗费时间,但在大多数情况下,您不会全部使用它们)。
  • 不管什么都可以被嘲弄/残留应该这样做,FakeItEasy让我们简单地存根任何类,只要它不密封(不必是一个接口)。处理未使用的方法参数是很好的。
  • 要处理OperationContext.Current(以及类似的问题),您可能需要稍微改变一下设计。准确地说,在某些方面,使用当前上下文中的所有类都需要实现protected virtual方法暴露它(或任何其他部分可能是有用的,说请求头):

    protected virtual MessageHeaders GetContextHeaders() 
    { 
        return OperationContext.Current.RequestContext.RequestMessage.Headers; 
    } 
    

    然后,你需要创建衍生, 可测试类将返回这些头(或上下文或您打算使用的任何)的模拟/存根版本,并在单元测试中创建该类的实例。

一旦你完成了单元测试,integration应该是一个简短的步行。只需将对象设置为在实际场景中使用的对象...并验证它们是否按预期工作。


旁注:单元测试也可以在一个更简单的方法但是这样做,你会要么需要支付工具(如Typemock Isolator,它让你嘲笑静态/密封类)和/或稍重/复杂的(PEX/Moles)。

相关问题