无法为接口模拟传递构造函数参数

时间:2013-03-16 11:41:20

标签: c# moq

当我调试代码并使用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。

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:12)

线索在错误消息“无法为接口模拟传递构造函数参数。”

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

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

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

答案 1 :(得分:0)

你只是想做什么...

1) 创建一个普通的接口模拟。

  var mockDateService = new Mock<IDateService>();

2) 做一个设置来接受你需要的东西作为构造函数参数。

mockDateService .Setup(s => s.ConstructorParam).Returns(constructorParamValue);