unit测试一个调用wcf服务的方法

Asd*_*dfg 7 c# wcf unit-testing

如何对调用WCF服务的业务层方法进行单元测试?

例:

public void SendData(DataUnit dataUnit)
{

        //this is WCF call
        SomeServiceClient svc = new SomeServiceClient();

        svc.SomeMethod(dataUnit);

}
Run Code Online (Sandbox Code Playgroud)

有没有办法在单元测试项目中模拟SomeServiceClient?

Dav*_*all 12

您的问题在于您已将业务层与WCF服务紧密耦合 - 您实际上在业务层中创建了服务客户端的新实例,这意味着现在无法调用SendData方法而无需调用服务方法.

这里最好的解决方案是为您的架构引入依赖注入.

最简单的方法是将服务类的实例传递到业务层.这通常使用构造函数参数在类构造时完成.

public class BusinessClass
{
    private ISomeServiceClient _svc;

    public BusinessClass(ISomeServiceClient svc)
    {
        _svc = svc;
    }

    public void SendData(DataUnit dataUnit)
    {
       _svc.SomeMethod(dataUnit);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,上面的代码是一种设计模式,完全不依赖于任何框架,如Inversion of Control容器.

如果贵公司的政策是不使用此类框架(顺便说一句疯狂的政策),您仍然可以在单元测试中手动注入服务的模拟实例.

  • 依赖注入作为架构模式与使用DI框架或IOC容器之间存在差异. (7认同)