Moq - 如何为多次测试初始化​​测试对象一次

时间:2013-09-20 12:58:10

标签: c# unit-testing moq mstest

我正在尝试以这样的方式构建我的单元测试:如果我更改正在测试的对象的构造函数,我不必更改大量的测试。以下是我现在设置的简化示例:

[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之前创建。还有另一种方法可以解决这个问题吗?

3 个答案:

答案 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()]属性在函数中初始化这些对象。这应该在该类运行的任何测试之前运行。