模拟继承类的构造函数参数与父类构造函数参数不同

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

我正在为 ASP.Net Core 应用程序的控制器操作编写测试。我的应用程序的所有控制器都继承自基本控制器,我们称其为

MyBaseController
。这个类的构造函数如下所示:

public MyBaseConstructor(ServiceA serviceA, ServiceB serviceB)
{
 m_serviceA = serviceA;
 m_serviceB = serviceB;
}

所以任何继承的类都可以用这个来模拟:

protected TController MockedController<TController>() where TController: MyBaseController
{
var moqController = new Mock<TController>(serviceAMock, serviceBMock);

return moqController.Object;
}

这工作得很好,直到我们有继承自

MyBaseController
的类并需要
ServiceC serviceC
附加参数。

当我尝试使用额外参数对此类控制器运行测试时,出现错误:“无法找到与给定参数匹配的构造函数”。情况似乎很清楚,但我不知道如何编写通用构造函数模拟以避免为此类类创建特定方法(其中很多具有不同的构造函数参数)。

有什么方法可以实现我的目标吗?或者最好的方法是编写单独的方法来模拟具有不同参数的类?

c# asp.net-core moq
1个回答
0
投票

典型的设计进程通常是这样开始的,然后继续进行对象母亲模式的变体(在本例中向

MockedController
添加方法重载),可能是一种 Fluent Builder 或自动模拟容器 .

最终,您应该意识到,虽然所有这些都是针对狭隘问题的可行解决方案,但总的来说它们是过度模拟的症状,这再次表明被测系统可能过于复杂。

在这种情况下,例如,为什么您需要两者一个基本控制器注入的依赖项?

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