2017-07-18 71 views
1

我是NUnit的新手,並且有關如何在測試對象的構造函數中注入接口對象數組的問題。例如:使用NMock注入接口數組C#

Class Class1 
{ 
    private ITest[] iTests; 
    private ITest1 iTest1; 

    Class1(ITest1 iTest1, ITest[] iTests) 
    { 
     this.iTests = iTests; 
     this.iTest1 = iTest1; 
    } 
} 

[TestFixture()] 
class Class1UnitTest 
{ 
    private Mock<ITest1> iTest1; 
    private Class1 class1; 

    [SetUp] 
    public void setUp() 
    { 
     this.iTest1 = new Mock<ITest1>(); 
     class1 = new Class1 (this.iTest1.Objeсt, ????); 
    } 
} 

有人能讓我知道如何在單元測試中注入ITest []嗎?

在此先感謝。

+0

我沒有看到你的陣列,我剛纔看到'這一點。 iTest1.Object'是ITest1而不是ITest []'。你想作爲數組傳入構造函數中什麼?你能舉一些例子嗎? –

+0

抱歉,錯誤。我在這個問題上編輯了我的意圖。我想知道如何注入'ITest []'現在顯而易見。讓我知道如果它還不清楚 –

+0

@VenuChitta只需創建一個數組,並使用mocks填充它,就像您之前創建的那個一樣。 – Nkosi

回答

1

只需創建一個數組並使用與之前創建的模塊一樣的模擬填充它。

[TestFixture()] 
class Class1UnitTest { 
    private Mock<ITest1> iTest1; 
    private ITest[] iTests; 
    private Class1 class1; 

    [SetUp] 
    public void setUp() { 
     this.iTest1 = new Mock<ITest1>(); 

     var mock1 = new Mock<ITest>(); 
     var mock2 = new Mock<ITest>(); 
     var mock3 = new Mock<ITest>(); 

     this.iTests = new ITest[] { 
      mock1.Object, 
      mock2.Object, 
      mock3.Object, 
      //... 
     } 
     class1 = new Class1 (this.iTest1.Objeсt, this.iTests); 
    } 
} 

你甚至可以創建一個輔助工法代碼

public T[] MockArray<T>(int length) where T : class { 
    return Enumerable.Range(0, length).Select(i => new Mock<T>().Object).ToArray(); 
} 

,並調用它在測試

this.iTests = MockArray<ITest>(5);