单元测试一个c#.Net网络服务通过隔离它依赖的网络服务
问题描述:
我必须单元测试C#项目,它依赖于其他几个Web服务。虽然单元测试我不想调用服务,但只是返回一个虚拟值。我正在尝试使用垫片,但我面临的问题。当前代码创建针对外部web服务的客户端,然后调用一个方法单元测试一个c#.Net网络服务通过隔离它依赖的网络服务
CSSFormTransformationClient client = new CSSFormTransformationClient();
MemoryStream stream = client.TransformToPDF(cssRequest);
由svcutil.exe的工具生成的CSSFormTransformationClient的定义和有一个方法TransformToPDF如下
public System.IO.MemoryStream TransformToPDF(Mycompany.Enterprise.Reporting.ServiceReferences.CssTransformation.TransformRequest transformRequest)
{
return base.Channel.TransformToPDF(transformRequest);
}
现在我假设我可以用以下方式使用匀场来模拟transformToPDF的返回值
ServiceReferences.CssTransformation.Fakes.ShimCSSFormTransformationClient.AllInstances.TransformToPDF =() => { }
但是它不允许我。有人告诉我如何模拟transformToPDF方法?
感谢。
P.S - 该项目使用WCF。
答
按照我的评论:用Moq试试(Available on NuGet)。
using Moq;
using TransformRequest = Mycompany.Enterprise.Reporting.ServiceReferences.CssTransformation.TransformRequest;
private MemoryStream _toReturn;
public void SetupTest()
{
this._toReturn = new MemoryStream();
}
public void TearDownTest()
{
if (this._toReturn != null)
{
this._toReturn.Dispose();
}
}
public void YourTestMethod()
{
var client = new Mock<CSSFormTransformationClient>();
client.Setup(c => c.TransformToPDF(It.IsAny<TransformRequest>())
.Returns(this._toReturn);
MemoryStream stream = client.TransformToPDF(cssRequest); //Get cssRequest beforehand... I don't know where it came from.
//Continue with your test.
}
+0
好!谢谢!我会试一试。 :) –
我已经添加了假装配和一切..只是错过了正确的方式去做这个.. –
你可以定义“不让我”?你是否收到错误或其他消息?究竟是什么问题?另外,你有没有尝试Moq? – Brandon
@Brandon _ServiceReferences.CssTransformation.Fakes.ShimCSSFormTransformationClient.AllInstances_ 之后它只给了我两个选项“等于”和“引用等于”。如果我做了其他事情,VS强调它是红色的。我没有尝试过模拟。鉴于moq在这种服务隔离中的一般描述和一般适合性,是否会暗示垫片? –