2017-07-18 79 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);