如何解决单元测试调用wcf服务的方法
| 如何对调用WCF服务的业务层方法进行单元测试? 例:public void SendData(DataUnit dataUnit)
{
//this is WCF call
SomeServiceClient svc = new SomeServiceClient();
svc.SomeMethod(dataUnit);
}
有什么方法可以在单元测试项目中模拟SomeServiceClient?
解决方法
这里的问题是您已将业务层与WCF服务紧密耦合-实际上在业务层中创建了服务客户端的新实例,这意味着现在不调用服务方法就无法调用SendData方法。
最好的解决方案是将依赖注入引入您的体系结构。
最简单的是,您要做的就是将服务类的实例传递到业务层。这通常是在类构造时使用构造函数参数完成的。
public class BusinessClass
{
private ISomeServiceClient _svc;
public BusinessClass(ISomeServiceClient svc)
{
_svc = svc;
}
public void SendData(DataUnit dataUnit)
{
_svc.SomeMethod(dataUnit);
}
}
请注意,上面的代码是一种设计模式,绝对不依赖于任何框架(如控制容器倒置)。
如果您公司的政策是不使用此类框架(顺便说一句疯狂的政策),您仍然可以在单元测试中手动注入服务的模拟实例。
,您应该将服务呼叫与业务层分开:
使用下面的演示,您列出的业务层方法现在看起来像这样:
public void SendData(IMyInterface myInterface,DataUnit dataUnit)
{
myInterface.SomeMethod(dataUnit);
}
如果要执行服务调用,请传递RealThing;如果只想运行测试,请传递TestThing:
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
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。