1

我试图以这样一种方式构建我的单元测试,即如果我更改正在测试的对象的构造函数,我不必更改很多测试。这是我现在设置的简化示例:

[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 之前创建。还有另一种方法来处理这个吗?

4

3 回答 3

6

是的,您可以在设置依赖项之前提取服务的创建。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(...);
}
于 2013-09-20T14:00:25.953 回答
0

您可以使用 [ClassInitialize()] 属性在函数中初始化这些对象。这应该在该类中的任何测试运行之前运行。

于 2013-09-20T13:16:29.847 回答
0

看看Automoqing,因为你已经在使用 Moq,它会做你想做的,甚至更好。简单来说就是注入模拟的依赖注入容器。

于 2013-09-20T13:03:33.473 回答