To wydaje się być czymś prostym, ale nie mogę sprawić, żeby zadziałało.Jak sprawdzić, czy inna metoda w klasie została wywołana za pomocą Moq
Mam klasę z metodą Save, która po prostu wywołuje inną metodę ShouldBeCalled(). Chcę sprawdzić, czy jeśli wywołasz Save(), to druga metoda ShouldBeCalled() jest wykonywana co najmniej raz. Myślałem, że mogę zrobić co następuje.
public class ClassA
{
public virtual void Save()
{
ShouldBeCalled();
}
public virtual void ShouldBeCalled()
{
//This should get executed
}
}
[TestFixture]
public class ClassA_Test
{
[Test]
public void Save_Should_Call_ShouldBeCalled()
{
var mockClassA = new Mock<ClassA>();
mockClassA.Object.Save();
mockClassA.Verify(x => x.ShouldBeCalled(), Times.AtLeastOnce());
}
}
Ale pojawia się wyjątek „Oczekiwany wezwanie na mock co najmniej raz, ale nigdy nie została wykonana: x => x.ShouldBeCalled()”
To tylko przypuszczenie, ale jest Moq nadrzędnymi Metoda Save() z własną wersją, która ignoruje wszystko, co mam w metodzie Save object.
+1: Świetna odpowiedź, wraz z wyłudzaniem przykładów zależności i kodu! Zauważ, że alternatywą dla metody wirtualnej byłoby dodanie interfejsu IBusinessLogic i przekazanie tego. – TrueWill
Interfejs IBusinessLogic jest zdecydowanie najlepszym sposobem, aby przejść tutaj, ale nie chciałem zbytnio w to zagłębiać. –
Dzięki za wspaniałą odpowiedź. Miałem przeczucie, że próbuję zrobić coś złego z moim podejściem i teraz wiem, że byłem :) – Adam