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