unit测试一个调用wcf服务的方法
如何对调用WCF服务的业务层方法进行unit testing?
例:
public void SendData(DataUnit dataUnit) { //this is WCF call SomeServiceClient svc = new SomeServiceClient(); svc.SomeMethod(dataUnit); }
有没有办法在unit testing项目中模拟SomeServiceClient?
您的问题在于您已将业务层与WCF服务紧密耦合 – 您实际上在业务层中创建了服务客户端的新实例,这意味着现在无法在不调用服务方法的情况下调用SendData方法。
这里最好的解决方案是为您的架构引入dependency injection。
最简单的方法是将服务类的实例传递到业务层。 这通常使用构造函数参数在类构造时完成。
public class BusinessClass { private ISomeServiceClient _svc; public BusinessClass(ISomeServiceClient svc) { _svc = svc; } public void SendData(DataUnit dataUnit) { _svc.SomeMethod(dataUnit); } }
请注意,上面的代码是一种设计模式,完全不依赖于任何框架,如Inversion of Control容器。
如果贵公司的政策是不使用此类框架(顺便说一句疯狂的政策),您仍然可以在unit testing中手动注入服务的模拟实例。
您应该将业务呼叫与业务层分开:
使用下面的演示,您列出的业务层方法现在看起来像这样:
public void SendData(IMyInterface myInterface, DataUnit dataUnit) { myInterface.SomeMethod(dataUnit); }
如果要进行服务调用,请传入RealThing,如果只想运行测试,则传入TestThing:
上述就是C#学习教程:unit测试一个调用wcf服务的方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public interface IMyInterface { void SomeMethod(DataUnit x); } public class RealThing : IMyInterface { public void SomeMethod(DataUnit x) { SomeServiceClient svc = new SomeServiceClient(); svc.SomeMethod(x); } } public class TestThing : IMyInterface { public void SomeMethod(DataUnit x) { // do your test here } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/989376.html