Oggi durante la scrittura di alcuni Unit Test mi sono imbattuto in un errore banale, ma che mi ha fatto perdere un po’ di tempo.
Sostanzialmente creando un mock parziale con Rhino Mocks mi saltava fuori sempre la seguente eccezione:
Invalid call, the last call has been used or no call has been made (make sure that you are calling a virtual (C#) / Overridable (VB) method).
La creazione del mock parziale è qualcosa del tipo (Visual Basic… si lo so…):
1: Dim service As IMyService = MockRepository.GeneratePartialMock(Of MyService)()
2: service.Expect(Function(e) e.MyFunction()).Return(True).Repeat.Once()
Come dice l’errore stesso, il tutto accade se la funzione MyFunction non viene dichiarata come Virtuale (Overridable in Visual Basic).
Le limitazioni di Rhino Mocks (prese da questo link) sono le seguenti:
- You cannot create a mock object from a sealed class.
- You cannot create a mock object from a private interface.
- You cannot intercept calls to non-virtual methods.