我应该在安装程序或测试用例中初始化模拟对象吗?

时间:2012-08-30 06:12:09

标签: unit-testing mocking tdd

在借助mock / fake对象进行单元测试时,我想知道如果我的测试类包含测试同一个类的方法(因此,假对象),是否更优先在SetUp或测试方法本身中初始化模拟对于所有测试用例,所需的应该是相同的)。像这样:

class FooTests
{
    Mock<IBar> mockBar;
    Foo fooUnderTest;

    [SetUp]
    public void Setup()
    {
        mockBar = new Mock<IBar>();
        fooUnderTest = new fooUnderTest(mockBar.Object);
    }

    [Test]
    public void MyTest()
    {
        //setup mock methods
        mockBar.SetUp( ... )

        //test
        fooUnderTest.TestSomething()

        //assert something here

    }
}

这似乎会阻止我们在每个测试用例中将代码复制到mockBar和fooUnderTest,但缺点是我必须声明类变量mockBar和fooUnderTest(或者这真的是一个缺点?),它将是如果我想要一些特殊的设置(例如,如果在某个测试用例中我想要覆盖Foo的一些虚拟方法),则会出现问题。有什么建议什么是最佳做法?

1 个答案:

答案 0 :(得分:5)

  • 如果套件/夹具中的所有测试共享一些常见设置 (包括对模拟协作者设置一些期望),移动到安装方法。 (同样,在测试中与读者无关的附带细节)
  • 如果一个测试用例想扩展常见设置,请在测试用例本身中添加特定的设置内联
  • 如果一个测试用例想要一个不同的设置(尽管有重大的重叠),移动到不同的测试套件并找出一些其他机制来共享设置(例如通过组合,实用方法,对象母亲等。)