提问人:Man Mohan Mundhra 提问时间:11/17/2023 最后编辑:Mark SeemannMan Mohan Mundhra 更新时间:11/17/2023 访问量:15
NUnit:如何防止调用基类构造函数或模拟基类构造函数(ASP.NET 使用 NUnit 进行 MVC 控制器方法测试)
NUnit : How to prevent calling base class constructor or mocking base class constructor (ASP.NET MVC controller method testing with NUnit)
问:
我正在使用 NUnit(在 .NET 框架上)测试一个 ASP.NET MVC 应用程序。
我正在尝试测试继承自 的方法。SomeController
BaseController
其中有一个无参数构造函数,用于读取配置、打开数据库连接、写入日志等。BaseController
当我对其中一种方法进行单元测试时,它会不断调用 的构造函数。SomeController
BaseController
我想模拟一下,这样它的构造函数就不会被调用。BaseController
我尝试过模拟,但不确定如何与模拟基类一起使用。BaseController
SomeController
如何解决这个问题?等待答案和替代方法......
答:
1赞
Mark Seemann
11/17/2023
#1
正如设计模式所建议的,
优先于对象组合而不是类继承。
您遇到了继承的几个问题之一,因为它是在 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
评论
0赞
Man Mohan Mundhra
11/20/2023
谢谢标记。我正在开发一个遗留应用程序。按照您的建议制定解决方案。在此之前,需要弄清楚现有代码中的更改。
评论