在使用模拟/假对象的单元测试中,我想知道如果我的测试类包含测试同一类的方法(因此,假对象),在 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 的一些虚拟方法),则会出现问题。有什么建议最好的做法是什么?
最佳答案
- 如果有一些通用设置由套件/固定装置中的所有测试共享(包括对模拟协作者设置一些期望),移至设置方法。 (对于测试中与读者无关的附带细节,也是如此)
- 如果一个测试用例想要扩展通用设置,请在测试用例本身中添加特定的内联设置
- 如果一个测试用例想要不同的设置(尽管有很大的重叠),移动到不同的测试套件并找出一些其他机制来共享设置(例如通过组合、实用方法、对象母体等)
关于unit-testing - 我应该在设置中还是在测试用例中初始化模拟对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12190863/