簡體   English   中英

使用 Moq 框架模擬方法不會返回預期結果

[英]mocking a method using Moq framework doesn't return expected result

我有一個類庫,它有 2 個類和一個接口,如下所示。
主要類:

    public class Class1 
    {
        int a=5 ,b=9;
        private Interface1 iHelper;
        public Class1(Interface1 _inter)
        {
            iHelper = _inter;
        }
        public int getData()
        {
            int result = iHelper.AddNumbers(a, b);
            return result;
        }

    }

HelperClass 類:

class HelperClass : Interface1
    {
        public int AddNumbers(int a, int b)
        {
            return a + b;
        }
    }

界面 :

public interface Interface1
    {
        int AddNumbers(int a, int b);
    }

現在,我正在嘗試測試getData()方法。 我使用Moq AddNumbers方法,如下所示。

[TestMethod()]
public void getDataTest()
{
     int a = 3, b = 5;
     int c = 8;
     var mockService = new Mock<Interface1>();
     mockService.Setup(x => x.AddNumbers(a,b)).Returns(c);

     Class1 obj = new Class1(mockService.Object);
     var result = obj.getData();
     int final = result;
 } 

當我調試這個測試時,它返回值 0。
據我了解,當我們模擬任何方法時,它必須在測試時返回模擬值。 在這種情況下,我將AddNumbers方法的返回值模擬為 8。所以它應該返回 8。但相反,它返回 0。

誰能解釋一下我做錯了什么。

編輯: 實際上,Class1 中ab的值是動態的。 在示例代碼中,我對其進行了硬編碼。 而且,我不想測試AddNumbers方法。 無論如何,我希望它返回一些固定值。 在這種情況下,我希望它返回 8。

您可以使用顯式數字在模擬期望中指定對AddNumbers的調用。 只有當這些顯式值被賦予AddNumbers才會返回 8。 如果您不關心AddNumbers的實際參數,您需要以忽略參數的方式指定您的期望(例如,通過It.IsAny<>

mockService.Setup(x => x.AddNumbers(It.IsAny<int>(),It.IsAny<int>())).Returns(c);

另請參閱https://github.com/Moq/moq4/wiki/Quickstart部分“匹配參數”。

因為Class1變量abgetDataTest定義的變量不同。 使用相同的值:

[TestMethod()]
public void getDataTest()
{
     int a = 5, b = 9; // here
     int c = 14; // and here
     var mockService = new Mock<Interface1>();
     mockService.Setup(x => x.AddNumbers(a,b)).Returns(c);

     Class1 obj = new Class1(mockService.Object);
     var result = obj.getData();
     int final = result;
 } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM