2013-03-16 40 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