2013-03-16 12 views
8

Kiedy debugowania kodu i przeczytać wiersz z mockLessonplannerAFactory stworzenia pojawia się błąd:argumentów konstruktora nie mogą być przekazywane do interfejsu kpi

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); 

Moja TimeTableService akceptuje instancji tylko typu interfejsu. Ale mockLessonplannerAFactory i BFactory ... chcą w swoim konstruktorze również przekazać IDateService.

Co jest nie tak z moim kodem?

Odpowiedz

7

Wskazówka znajduje się w komunikacie o błędzie "Nie można przekazać argumentów konstruktora dla makiet interfejsu."

Próba utworzona z interfejsu będzie miała domyślny konstruktor, ponieważ interfejsy nie mają konstruktora. Pamiętaj, że kpisz z interfejsu, a nie z konkretnej klasy.

"Ale mockLessonplannerAFactory i BFactory ... chcą w swoim konstruktorze również przekazać IDateService."

Obie są wyśmiewane z interfejsów, więc nie ma konstruktora. Klasa próbna utworzy domyślny konstruktor, którego nie trzeba niczego przekazywać.

+0

Tak, po prostu zdałem sobie sprawę, usuwając przekazanie mockDateService.Object, że wszystko działa poprawnie. – Elisabeth

+0

To nie rozwiązuje prawdziwego problemu, jak zmodyfikowałbyś fałszywą konfigurację? –

+0

Obiekty mockLessonPlanAFactory i mockLessonPlanBFactory nie potrzebują parametrów konstruktora. Każda metoda lub własność, którą mają, używają obiektów normalnie przekazywanych w konstruktorze konkretnej implementacji, są same w sobie metodami/właściwościami i ustawiasz je tak, aby zwracały odpowiednią wartość (w przeciwnym razie nie będziesz naprawdę kpił z tych obiektów). Konfigurujesz metody i właściwości, gdy ich potrzebujesz. –

Powiązane problemy