繁体   English   中英

mock.Setup(...).Returns(..); 不是 mocking

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM