Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在模拟中返回元组?_C#_.net_Unit Testing_Moq_Tuples - Fatal编程技术网

C# 如何在模拟中返回元组?

C# 如何在模拟中返回元组?,c#,.net,unit-testing,moq,tuples,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); } public虚拟元组getQuantilities(条目,CartHelper) { //有事可做 返回新元组(minQuan

我有这样一种方法:

public virtual Tuple<int,int> GetQuantities(Entry entry, CartHelper cartHelper)
{
    //something to do
    return new Tuple<int, int>(minQuantity, maxQuantity);
}
public虚拟元组getQuantilities(条目,CartHelper)
{
//有事可做
返回新元组(minQuantity、maxQuantity);
}
为了对其进行单元测试,我编写了以下模拟:

ProductMock
    .Setup(
        u => u.GetQuantities(It.IsAny<Entry>(), 
        It.IsAny<CartHelper>()))
    .Returns(new Tuple<int,int>(minQuantity, maxQuantity));
ProductMock
.设置(
u=>u.getQuantilities(It.IsAny(),
It.IsAny())
.Returns(新元组(minQuantity,maxQuantity));
但此代码未能编译,出现以下错误:

参数1:无法从“
System.Tuple
”转换为 “
System.Tuple`2

System.Tuple`2
向我建议了Tuple类背后的“匿名类型”,但我找不到幕后发生了什么,以及如何解决这个问题

编辑 对不起,我的错,我刚刚发现我们的主项目设置为.NET3.5,它使用来自自定义引用(System.ComponentModel.Composition)的元组,测试项目使用.NET4.0,它使用.NET的元组类。我不知道这个版本如何应用到我们的解决方案中,但我不得不切换到另一个解决方案,而不是使用Tuple;
var tupletoReturn=Tuple.Create<int, int>(51, 57);

ProductMock.Setup(u => u.GetQuantities(It.IsAny<Entry>(), It.IsAny<CartHelper>())).Returns(tupletoReturn);
ProductMock.Setup(u=>u.getQuantilities(It.IsAny(),It.IsAny()).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);


        }
    }
公共类MyClass
{
公共虚拟元组GetQuantilities(条目,CartHelper CartHelper)
{
返回新的元组(0,0);
}
}
[测试夹具]
公开课考试
{
[测试]
公共void TestMethod()
{
var tupleToReturn=Tuple.Create(10,20);
Mock p=新Mock();
p、 设置(
u=>u.getQuantilities(It.IsAny(),
It.IsAny())
.返回(tupleToReturn);
}
}

System.Tuple
2与匿名类型无关,它只表示名为
Tuple`的类中的一个,该类有两个泛型参数(与例如System.Collections.generic.List
1、System.Collections.generic.Dictionary等相同)<根据MSDN(),code>System.Tuple
是一个静态类,因此可能不存在System.Tuple的实例,因此您所面临的错误至少令人困惑。希望这能有所帮助。你用的是什么样的模拟框架?@Archeg:我们用的是Moqa,你用的是.NET4的元组类吗?您是否正在链接任何非标准元组实现以用于较旧的.NET版本?@TrueWill:我正在使用.NET 4.0类