我应该在设置或测试用例中初始化mock对象吗



在mock/fake对象的帮助下进行单元测试时,如果我的测试类包含测试同一类的方法(因此,所有测试用例所需的fake对象都应该相同),我想知道在SetUp或测试方法本身中初始化mock是否更可取。类似这样的东西:

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的一些虚拟方法),这将是有问题的。有什么建议吗?最佳做法是什么?

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

最新更新