gpt4 book ai didi

unit-testing - 能够将数组传递给模拟方法调用

转载 作者:行者123 更新时间:2023-12-02 04:17:19 25 4
gpt4 key购买 nike

我有一个要模拟的方法,该方法将数组作为参数。在实际调用中,该方法将修改此数组,并且生成的数组将在代码中进一步使用。
我试图做的是将数组传递给模拟方法调用,该方法具有在再次使用数组时有效的值。但是我发现当调用模拟方法时,它不使用我在设置模拟时指定的数组,而是使用原始数组,有没有办法解决这个问题。

例如

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 作为结果。你想做的是

  • 创建一个严格的模拟以更好地查看正在执行的内容
  • 设置一个需要初始数组的调用,然后运行委托(delegate)将值设置为 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]);
    }

    关于unit-testing - 能够将数组传递给模拟方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2288149/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com