簡體   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