当我调试代码并使用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。
我的代码出了什么问题?
答案 0 :(得分:12)
线索在错误消息“无法为接口模拟传递构造函数参数。”
从接口创建的模拟将具有默认构造函数,因为接口没有构造函数。记住你是在嘲笑界面而不是具体的类。
“但是mockLessonplannerAFactory和BFactory ......想在他们的构造函数中也传递一个IDateService。”
它们都是从接口模拟的,所以没有构造函数。 mock类将创建一个默认构造函数,不需要传递任何东西。
答案 1 :(得分:0)
你只是想做什么...
1) 创建一个普通的接口模拟。
var mockDateService = new Mock<IDateService>();
2) 做一个设置来接受你需要的东西作为构造函数参数。
mockDateService .Setup(s => s.ConstructorParam).Returns(constructorParamValue);