21

当我调试代码并阅读带有 mockLessonplannerAFactory 创建的行时,我收到错误:

不能为接口模拟传递构造函数参数。

var mockSchoolclassCodeService = new Mock<ISchoolclassCodeService>();
var mockDateService = new Mock<IDateService>();
var mockLessonplannerAFactory = new Mock<ILessonplannerAFactory>(mockDateService.Object);
var mockLessonplannerBFactory = new Mock<ILessonplannerBFactory>(mockDateService.Object);

var service = new TimeTableService(mockUnitOfWork.Object, mockLessonplannerAFactory.Object, mockLessonplannerBFactory.Object, mockSchoolclassCodeService.Object);

我的 TimeTableService 只接受接口类型的实例。但是 mockLessonplannerAFactory 和 BFactory... 想要在他们的构造函数中也传递一个 IDateService。

我的代码有什么问题?

4

2 回答 2

19

从接口创建的模拟将具有默认构造函数,因为接口没有构造函数。请记住,您是在模拟接口而不是具体类。

“但是 mockLessonplannerAFactory 和 BFactory ......希望在他们的构造函数中也传递一个 IDateService。”

它们都是从接口模拟的,所以没有构造函数。模拟类将创建一个不需要传递任何东西的默认构造函数。

于 2013-03-16T11:45:17.090 回答
1

你只是想做的事...

1)创建一个普通的界面模拟。

  var mockDateService = new Mock<IDateService>();

2)进行设置以接受您需要作为构造函数参数的事物方式。

mockDateService .Setup(s => s.ConstructorParam).Returns(constructorParamValue);
于 2021-05-29T10:35:43.227 回答