2

在借助模拟/假对象的单元测试中,我想知道如果我的测试类包含测试同一类的方法(因此,需要的假对象应该是所有测试用例都相同)。像这样的东西:

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 的一些虚拟方法)。有什么建议最好的做法是什么?

4

1 回答 1

5
  • 如果套件/夹具中的所有测试共享一些通用设置(包括对模拟合作者设置一些期望),则移动到 Setup 方法。(测试中与读者无关的附带细节同上)
  • 如果一个测试用例想要扩展通用设置,请在测试用例本身内添加特定设置
  • 如果一个测试用例需要不同的设置(尽管有很大的重叠),移动到不同的测试套件并找出一些其他机制来共享设置(例如,通过组合、实用方法、对象母亲等)
于 2012-08-30T07:14:06.403 回答