RhinoMocks - Подигравка Защитени виртуални членове

Доколкото знам, RM трябва да се подиграва на всичко, което може да бъде достъпно от производен клас. Тъй като защитеният виртуален член е достъпен от подклас, не трябва ли да бъде подиграван?

Разбирам, че RM не поддържа подиграване на защитени виртуални членове.


person Dave Smith    schedule 16.06.2010    source източник


Отговори (2)


Ако искам да се подигравам на защитен член, обикновено пропускам Rhino Mocks и просто го класифицирам със собствена фалшива реализация.

person Chris Missal    schedule 17.06.2010
comment
въздишка, това трябваше да направя, за да се подиграя на Microsoft WebApi Ok() защитен виртуален метод. ›.‹ - person Alex Nolasco; 03.07.2014
comment
@Alex Един вид проваля целта да имате подигравателна рамка, ако все още трябва да създавате фалшификати ръчно. - person Ash; 30.08.2017

Доколкото знам, RM трябва да се подиграва на всичко, което може да бъде достъпно от производен клас.

Не. Идеята е, че трябва да можете да се подигравате на поведението на зависимостите на тествания клас. Думата зависимости се използва тук в същия смисъл, както в инжектиране на зависимости.

При разработка, управлявана от тестове, обикновено се предпочита композицията пред наследяването. Зависимостите обикновено са скрити зад интерфейси.

Разбирам, че RM не поддържа подиграване на защитени виртуални членове.

Това е правилното. Има два кратки и безопасни за тип начина да посочите за кой член на класа говорите, когато настройвате поведение: чрез извикване на члена в режим на запис или с ламбда израз. Rhino Mocks поддържа и двете, но нито едно не може да работи за защитени членове.

person Wim Coenen    schedule 17.06.2010
comment
Позволете ми да преформулирам първото си твърдение, за да кажа Вътрешно, RM създава макет клас, който подкласира тествания клас (или интерфейс). Ако това е вярно, въпросът ми беше, тъй като защитените членове могат да бъдат достъпни чрез подкласа, защо RM не може да се подиграва на този член. - person Dave Smith; 17.06.2010
comment
@Dave: защото няма кратък и безопасен за тип начин за препратка към такива членове във вашия единичен тест. Извикването на защитен член в режим на запис не е разрешено от компилатора. Използването на защитен член в ламбда израз не е разрешено от компилатора. Низовете не са безопасни за тип. Следователно няма добър начин за настройка на поведение за такива методи. - person Wim Coenen; 17.06.2010