NUnit:如何防止调用基类构造函数或模拟基类构造函数(使用 NUnit 进行 ASP.NET MVC 控制器方法测试)

问题描述 投票:0回答:1

我正在使用 NUnit(在 .NET 框架上)测试 ASP.NET MVC 应用程序。

我正在尝试测试继承自

SomeController
BaseController
方法。

BaseController
中,有一个无参数构造函数,用于读取配置、打开数据库连接、写入日志等。

当我对

SomeController
中的一种方法进行单元测试时,它不断调用
BaseController
的构造函数。

我想模拟

BaseController
,这样它的构造函数就不会被调用。

我尝试模拟

BaseController
但不确定如何将其与
SomeController
一起用作模拟基类。

如何解决这个问题?等待答案和替代方法...

asp.net .net asp.net-mvc visual-studio nunit
1个回答
0
投票

正如设计模式推荐,

优先考虑对象组合而不是类继承。

您遇到了继承的几个问题之一,因为它是用 C# 等主流语言实现的。 AFAIK,这个问题没有直接的解决方案。

要么更改基类,使其构造函数不执行所有隐式工作(构造函数应该很简单),要么不从

BaseController
继承。

在后一种情况下,支持构造函数注入而不是从基类继承。

public sealed class SomeController
{
    private readonly ISomeDependency dep;

    public SomeController(ISomeDependency dep)
    {
        this.dep = dep;
    }

    // Use this.dep in methods...
}

这应该使您能够通过提供依赖项的

Test Double
来测试SomeController

© www.soinside.com 2019 - 2024. All rights reserved.