如何在模拟中返回元组? [英] How to return Tuple in a mock?
问题描述
我有一个这样的方法:
公共虚拟元组GetQuantities(Entry entry, CartHelper cartHelper){//做某事return new Tuple(minQuantity, maxQuantity);}
为了对其进行单元测试,我编写了这个模拟:
ProductMock.设置(你 =>u.GetQuantities(It.IsAny(),It.IsAny())).Returns(new Tuple(minQuantity, maxQuantity));
但是这段代码无法编译,出现这个错误:
<块引用>参数 1:无法从 'System.Tuple
' 转换为'System.Tuple`2
'
System.Tuple`2
向我建议了 Tuple 类背后的匿名类型",但我找不到幕后发生的事情,以及如何解决这个问题.>
编辑
抱歉,我的错,我刚刚发现我们的主项目设置为 .NET 3.5,它使用来自自定义引用 (System.ComponentModel.Composition) 的 Tuple,而测试项目使用的是 .NET 4.0,它使用.NET 的元组类.我不知道我们的解决方案是如何出现版本不一致的,但我不得不切换到另一种解决方法,而不是使用 Tuple.
var tupletoReturn=Tuple.Create(51, 57);ProductMock.Setup(u => u.GetQuantities(It.IsAny(), It.IsAny())).Returns(tupletoReturn);
如果对我有用
公共类MyClass{公共虚拟元组GetQuantities(Entry entry, CartHelper cartHelper){返回新元组(0, 0);}}[测试夹具]公开课测试{[测试]公共无效测试方法(){var tupleToReturn = Tuple.Create(10, 20);模拟<MyClass>p = new Mock();p.设置(你 =>u.GetQuantities(It.IsAny(),It.IsAny())).Returns(tupleToReturn);}}
I have an method like this:
public virtual Tuple<int,int> GetQuantities(Entry entry, CartHelper cartHelper)
{
//something to do
return new Tuple<int, int>(minQuantity, maxQuantity);
}
and to unit-test it, I write this mock:
ProductMock
.Setup(
u => u.GetQuantities(It.IsAny<Entry>(),
It.IsAny<CartHelper>()))
.Returns(new Tuple<int,int>(minQuantity, maxQuantity));
But this code failed to compile, with this error:
Argument 1: cannot convert from '
System.Tuple<int,int>
' to 'System.Tuple`2<int,int>
'
System.Tuple`2
suggests me about the "anonymous type" behind the Tuple class, but I can't find what going on behind the scene, and how to fix this issue.
Edit
Sorry, my bad, I just discovered that our main project is set to .NET 3.5, and it uses Tuple from a custom reference (System.ComponentModel.Composition), and test project is using .NET 4.0, and it use .NET's Tuple class. I don't know how this version-inconsistent come to our solution, but I had to switch to another workaround, instead of using Tuple.
var tupletoReturn=Tuple.Create<int, int>(51, 57);
ProductMock.Setup(u => u.GetQuantities(It.IsAny<Entry>(), It.IsAny<CartHelper>())).Returns(tupletoReturn);
if works for me
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);
}
}
这篇关于如何在模拟中返回元组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!