[英]mock.Setup(…).Returns(..); Not mocking
我正在运行 WCF 应用程序,需要添加一些单元测试。 最初我尝试了 JustMock,免费版本,因为这是我目前所在公司的标准,但是免费版本不support system.linq.xml
所以,我搬到了最小起订量,并认为这会起作用,但是下面的代码块
Mock<IVersionFilter> mock = new Mock<IVersionFilter>();
var message = CreateValidGetProposalListMessage();
var returnValue = XDocument.Parse(GenerateXmlString());
mock.Setup(VersionFilter => VersionFilter.ParseMessage(message)).Returns(returnValue);
应该从这个调用中模拟 ParseMessage(...) 的结果
public override bool Match(Message message)
{
var doc = ParseMessage(message);
var getProposalList = doc.Descendants(_xmlnsa + MethodConstants.GetProposalList).FirstOrDefault();
if (getProposalList != null)
{
// code ommitted
}
/// Test code ommitted
}
public XDocument ParseMessage(Message message)
{
XDocument doc = XDocument.Parse(message.ToString());
return doc;
}
public Message CreateValidGetProposalListMessage()
{
var p = new getProposalList
{
Code = "xxxx"
};
var message = Message.CreateMessage(MessageVersion.Soap11, "getProposalList xmlns=\"http://xxx\">", p);
return message;
}
我看不出我错过了什么,如果有人能帮助我推进这个问题,我将不胜感激。
谢谢
设置看起来基本没问题。 我怀疑您的问题是由于参数相等,根本没有调用设置。
mock.Setup(VersionFilter => VersionFilter.ParseMessage(message)).Returns(returnValue);
这就是说ParseMessage
用等于message
的东西调用将返回returnValue
。 如果Message
是 class 这只有在Message
实现它自己的Equals
方法时才有效。
正如我的 OP 评论中提到的,从基础开始。 确保首先调用设置:
mock.Setup(VersionFilter => VersionFilter.ParseMessage(It.IsAny<Message>())).Returns(returnValue);
一旦你得到这个工作,调整它以适应测试用例。 您可以为Message
类型实现Equals
方法(如果您愿意,我建议使用 Fody),或者通过It.Is<Message>(message => match conditions)
以另一种方式匹配它。
您已使用此行创建了IVersionFilter
的模拟
Mock<IVersionFilter> mock = new Mock<IVersionFilter>();
但我希望看到一个IVersionFilter
在其构造函数中采用 IVersionFilter。 然后你会做
var myTestClass = new TestClass(mock.Object)
然后,当测试IVersionFilter
使用 IVersionFilter 中的功能时,它使用模拟的功能
澄清一下,TestClass 类似于
public class TestClass(IVersionFilter filter)
{
public void DoSomething()
{
filter.DoSomething();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.