如何在模拟中返回元组?

时间:2012-02-15 10:21:10

标签: c# .net unit-testing moq tuples

我有这样的方法:

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

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

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

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

  

参数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类。我不知道这个版本不一致如何解决我们的解决方案,但我不得不切换到另一种解决方法。而不是使用元组。

感谢您的帮助。

谢谢。

1 个答案:

答案 0 :(得分:6)

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

ProductMock.Setup(u => u.GetQuantities(It.IsAny<Entry>(), It.IsAny<CartHelper>())).Returns(tupletoReturn);

如果适合我

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);


        }
    }