如何在模拟中返回元组?

Vim*_*987 2 .net c# unit-testing tuples moq

我有一个像这样的方法:

public virtual Tuple<int,int> GetQuantities(Entry entry, CartHelper cartHelper)
{
    //something to do
    return new Tuple<int, int>(minQuantity, maxQuantity);
}
Run Code Online (Sandbox Code Playgroud)

并对它进行单元测试,我写这个模拟:

ProductMock
    .Setup(
        u => u.GetQuantities(It.IsAny<Entry>(), 
        It.IsAny<CartHelper>()))
    .Returns(new Tuple<int,int>(minQuantity, maxQuantity));
Run Code Online (Sandbox Code Playgroud)

但是此代码无法编译,出现此错误:

参数1:无法从' System.Tuple<int,int>' 转换为' System.Tuple`2<int,int>'

System.Tuple`2 向我展示了Tuple课程背后的"匿名类型",但我无法找到幕后发生的事情,以及如何解决这个问题.

编辑:对不起,我的坏,我刚刚发现我们的主项目设置为.NET 3.5,它使用自定义引用(System.ComponentModel.Composition)中的Tuple,测试项目使用.NET 4.0,它使用. NET的Tuple类.我不知道这个版本不一致如何解决我们的解决方案,但我不得不切换到另一种解决方法.而不是使用元组.

谢谢您的帮助.

谢谢.

Mas*_*uso 7

var tupletoReturn=Tuple.Create<int, int>(51, 57);

ProductMock.Setup(u => u.GetQuantities(It.IsAny<Entry>(), It.IsAny<CartHelper>())).Returns(tupletoReturn);
Run Code Online (Sandbox Code Playgroud)

如果适合我

public class MyClass
    {
        public virtual Tuple<int, int> GetQuantities(Entry entry, CartHelper cartHelper)
        {

            return new Tuple<int, int>(0, 0);
        }
    }

    [TestFixture]
    public class Test
    {
        [Test]
        public void TestMethod()
        {
            var tupleToReturn = Tuple.Create<int, int>(10, 20);
            Mock<MyClass> p = new Mock<MyClass>();
            p.Setup(
           u => u.GetQuantities(It.IsAny<Entry>(),
                   It.IsAny<CartHelper>()))
                      .Returns(tupleToReturn);


        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 这是返回 Tuple 的任务 ---- https://jamesradley.co.uk/2020/08/05/mock-a-return-type-of-task-and-tuple-with-moq/ (5认同)