Rozumiem, że mogę sprawdzić, czy wywołanie metody nastąpi, jeśli wywołam metodę wyższego poziomu, tj .:
public abstract class SomeClass()
{
public void SomeMehod()
{
SomeOtherMethod();
}
internal abstract void SomeOtherMethod();
}
Chcę sprawdzić, czy jeśli zadzwonię SomeMethod()
, spodziewam się, że SomeOtherMethod()
zostanie wezwany.
Czy mam rację, myśląc, że ten rodzaj testu jest dostępny w fałszywej strukturze?
Nie, testy próbne zakładają, że używasz pewnych testowalnych wzorców projektowych, z których jeden to wstrzykiwanie. W twoim przypadku będziesz testować
SomeClass.SomeMethod
iSomeOtherMethod
musisz zostać zaimplementowany w innej jednostce, która wymaga interfejsu.Twój
Someclass
konstruktor by wyglądałNew(ISomeOtherClass)
. Następnie kpiłbyś z niegoISomeOtherClass
i oczekiwał,SomeOtherMethod
że zostanie wywołany, i zweryfikuj to oczekiwanie.źródło
Mimo że zgadzam się, że odpowiedź @ Paul jest zalecaną drogą, chcę tylko dodać jedną alternatywną drogę, która jest zapewniana przez „
moq
poza sobą”.Ponieważ
SomeClass
jestabstract
rzeczywiście kpiny, alepublic void SomeMehod()
nie jest. Chodzi o to, aby znaleźć sposób na mock i jakoś wywołać tę metodę, a następnie za pomocąCallBase
propagacji wywołania doSomeOtherMethod()
. Może to zabrzmieć jak włamanie, ale w istocie jest proste. Można by to wykorzystać w przypadku, gdy proponowana refaktoryzacja nie jest możliwa.Następnie można skonfigurować
DummyMethod()
propagowanie wywołania przez ustawienieCallBase
flagi.źródło