簡體   English   中英

能夠將數組傳遞給模擬方法調用

[英]Ability to pass array to mocked method call

我有一個方法,我想模​​擬,將數組作為參數。 在實際調用中,該方法將修改此數組,並且結果數組將在代碼中進一步使用。 我試圖做的是將數組傳遞給模擬方法調用,該方法調用具有在再次使用數組時有效的值。 然而,我發現當調用模擬方法時,它不使用我在設置模擬時指定的數組,而是使用原始數組,是否有解決此問題的方法。

例如

public interface ITest
{
    int Do(int[] values);
}

public void MyTest
{
    var testMock = new Mock<ITest>();
    int[] returnArray = new int[] {1,2,3};
    testMock.Setup(x => x.Do(returnArray)).Returns(0);
    MyTestObject obj = new MyTestObject();
    obj.TestFunction(testMock.Object);
}

public class MyTestObject
{
  .....
    public void TestFunction(ITest value)
    {
         int [] array = new int[3];
         value.Do(array);
         if (array[0] == 1) 

這是我的測試失敗的地方,因為數組仍然是聲明上面兩行的空數組而不是我在模擬方法調用中指定的數組。 希望這能解釋我想要實現的目標,如果有的話,無論如何都要這樣做。 如果可以這樣做的話,也可以使用RhinoMocks。

預先感謝,

千電子伏

你在這里做的唯一事情是設置一個期望,你的Do方法將使用returnArray作為參數調用,並且它將返回0作為結果。 你想做的是

  1. 創建一個嚴格的模擬,以更好地了解正在執行的內容
  2. 設置一個需要初始數組的調用,然后運行一個委托將值設置為1,2,3

使用Rhino Mock這看起來像這樣(使用moq它將是等效的):

private delegate int DoDelegate(int[] values);

[Test]
public void MyTest()
{
    var testMock = MockRepository.GenerateStrictMock<ITest>();
    testMock.Expect(x => x.Do(null))
        .IgnoreArguments()
        .Do(new DoDelegate(delegate(int[] values)
                             {
                                 values[0] = 1;
                                 values[1] = 2;
                                 values[2] = 3;
                                 return 0;
                             }));

    //Execution (use your real object here obviously
    int[] array = new int[3];
    testMock.Do(array);
    Assert.AreEqual(1, array[0]);
}

暫無
暫無

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

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