2012-02-15 35 views
1

我有一個這樣的方法:如何在模擬中返回元組?

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

但是這段代碼無法編譯,與此錯誤:

Argument 1: cannot convert from ' System.Tuple<int,int> ' to ' System.Tuple`2<int,int> '

System.Tuple`2向我暗示了Tuple類背後的「匿名類型」,但我無法找到幕後發生的事情,以及如何解決這個問題。編輯:對不起,我發現我們的主項目設置爲.NET 3.5,它使用自定義引用(System.ComponentModel.Composition)中的Tuple,並且測試項目使用.NET 4.0,它使用.NET的Tuple類。我不知道這個版本的不一致如何來到我們的解決方案,但我不得不切換到另一種解決方法。而不是使用Tuple。

謝謝你的幫助。

謝謝。

+1

System.Tuple'2無關匿名類型,它只是表示名爲'Tuple'類有兩個通用的參數之一(在相同的方式如System.Collections.Generic.List'1,System.Collections.Generic.Dictionary'2等)。根據MSDN(http://msdn.microsoft.com/en-us/library/system.tuple.aspx),System.Tuple是一個靜態類,因此可能不存在System.Tuple的實例,並且因此你面對的錯誤至少令人困惑。希望這有助於某種方式。 – penartur 2012-02-15 10:25:48

+0

你使用什麼模擬框架? – Archeg 2012-02-15 10:25:59

+0

@Archeg:我們正在使用Moq – Vimvq1987 2012-02-15 10:26:40

回答

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


     } 
    } 
+0

不幸的是,這並沒有幫助:( – Vimvq1987 2012-02-15 10:29:27

+0

你得到了什麼錯誤? – 2012-02-15 10:29:55

+0

仍然與上述相同 – Vimvq1987 2012-02-15 10:31:47