2013-03-16 41 views
8

当我调试的代码,并读取与mockLessonplannerAFactory创建行我得到的错误:构造论据接口无法通过嘲笑

Constructor arguments cannot be passed for interface mocks.

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。

我的代码有什么问题?

回答

7

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

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

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

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

+0

是的我刚刚意识到通过删除mockDateService.Object的传递,一切工作正常。 – Elisabeth 2013-03-16 11:57:45

+0

这并不解决真正的问题,你将如何修改模拟设置 – 2016-07-06 20:11:46

+0

mockLessonPlanAFactory和mockLessonPlanBFactory不需要构造函数参数。任何使用通常在具体实现的构造函数中传递的对象的方法或属性本身都是mock方法/属性,并且您将它们设置为返回适当的值(否则您并不真正嘲笑这些对象)。您根据需要设置方法和属性。 – 2016-07-07 13:14:22