在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的一些虚拟方法),这将是有问题的。有什么建议吗?最佳做法是什么?
- 如果套件/夹具中的所有测试都共享一些常见的设置(包括对模拟合作者设置一些期望),则移动到设置方法。(测试中与读者无关的附带细节同上)
- 如果一个测试用例想要扩展通用设置,请在测试用例本身内内联添加特定的设置
- 如果一个测试用例想要不同的设置(尽管存在显著重叠),则移动到不同的测试套件并找出其他共享设置的机制(例如,通过组合、实用程序方法、对象母亲等)