我正在尝试以这样的方式构建我的单元测试:如果我更改正在测试的对象的构造函数,我不必更改大量的测试。以下是我现在设置的简化示例:
[TestMethod]
public void Test1()
{
_mockedObject1.Setup(etc);
_mockedObject2.Setup(etc);
var service = new TestedService(_mockedObject1.Object, _mockedObject2.Object, ...,
_mockedObject7.Object);
//Act and Assert
}
现在我有20个单元测试以同样的方式排列。如果我必须更改TestedService的构造函数,我必须进入所有20个测试并更改创建服务的行。我可以将这行代码拉入TestInitialize或其他东西,以便我只需要更改一次吗?我的第一个想法是我不能,因为那时服务会在我的.Setups之前创建。还有另一种方法可以解决这个问题吗?
答案 0 :(得分:4)
是的,您可以在设置依赖项之前完成服务的创建。 SetUp仍将绑定到模拟对象。你可以尝试类似的东西:
private TestedService service;
[SetUp]
public void SetUp()
{
this.service = new TestedService(_mockedObject1.Object, _mockedObject2.Object, ...,
_mockedObject7.Object);
}
[TestMethod]
public void Test1()
{
_mockedObject1.Setup(etc);
_mockedObject2.Setup(etc);
//Act and Assert
this.service.Whatever(...);
}
答案 1 :(得分:0)
看看Automoqing因为你已经在使用Moq,它会做你想做的甚至更好的事情。简单来说就是注入模拟的依赖注入容器。
答案 2 :(得分:0)
您可以使用[ClassInitialize()]属性在函数中初始化这些对象。这应该在该类运行的任何测试之前运行。