如何在模拟中返回元组? [英] How to return Tuple in a mock?

查看:29
本文介绍了如何在模拟中返回元组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个这样的方法:

公共虚拟元组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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆