对于某些需要,我编写了实现IServiceBehavior
,IEndpointBehavior
,IDispatchMessageInspector
,并且我所有的WCF服务都使用它们。自定义WCF扩展(如自定义行为和检查器)的单元测试
我需要单元测试它们吗?如果是,我该如何测试这些自定义WCF扩展点?我正在使用MSTest。
对于某些需要,我编写了实现IServiceBehavior
,IEndpointBehavior
,IDispatchMessageInspector
,并且我所有的WCF服务都使用它们。自定义WCF扩展(如自定义行为和检查器)的单元测试
我需要单元测试它们吗?如果是,我该如何测试这些自定义WCF扩展点?我正在使用MSTest。
你应该有两套测试:
单元测试的实现应该像单元测试一样进行。这真的会缩小到验证这些自定义实现的功能。简单的旧单元测试。
但是,请注意,有两个主要障碍,成功的单元测试等WCF位实现:
当然,所有这可以通过适当的技术和工具的使用来克服:
要处理OperationContext.Current
(以及类似的问题),您可能需要稍微改变一下设计。准确地说,在某些方面,使用当前上下文中的所有类都需要实现protected virtual
方法暴露它(或任何其他部分可能是有用的,说请求头):
protected virtual MessageHeaders GetContextHeaders()
{
return OperationContext.Current.RequestContext.RequestMessage.Headers;
}
然后,你需要创建衍生, 可测试类将返回这些头(或上下文或您打算使用的任何)的模拟/存根版本,并在单元测试中创建该类的实例。
一旦你完成了单元测试,integration应该是一个简短的步行。只需将对象设置为在实际场景中使用的对象...并验证它们是否按预期工作。
旁注:单元测试也可以在一个更简单的方法但是这样做,你会要么需要支付工具(如Typemock Isolator,它让你嘲笑静态/密封类)和/或稍重/复杂的(PEX/Moles)。