Wie überprüfe ich, ob eine von zwei Methoden aufgerufen wurde?

8

Ich verwende Moq, um zu überprüfen, ob eine Methode in meinem Unittest aufgerufen wird. In diesem speziellen Fall möchte ich testen, ob die zu testende Methode einen Fehler über log4net protokolliert. Das Problem besteht darin, dass dies entweder durch Aufruf von log.Error oder log.ErrorFormat geschehen kann. Beides ist in Ordnung.

Wie kann ich das überprüfen? Ich kann nur bestätigen, dass beide aufgerufen wurden.

%Vor%

Nun, da ich darüber nachdenke, haben sie beide eine Reihe von Überlastungen. Es macht mir nichts aus, wenn eine der Überladungen auch genannt wird (ich beginne zu bezweifeln, dass das ein guter Test ist).

Vielen Dank im Voraus.

EDIT: Ich habe gerade an etwas Fieses gedacht:

%Vor%

Vielleicht kann ich das in eine Art von Erweiterungsmethode einbetten ... z. VerifyAny .

    
Matthijs Wessels 10.01.2013, 00:09
quelle

2 Antworten

9

Sie können einen Rückruf für jede gültige Fehlermethode registrieren, die ein Flag setzt:

%Vor%

Natürlich ist das immer noch mühsam, wenn Sie viele Überladungen abdecken müssen.

BEARBEITEN : Und zum Spaß, hier ist eine Erweiterungsmethode für Mock<T>.VerifyAny :

%Vor%

Verwendung:

%Vor%     
Scott Wegner 10.01.2013, 00:20
quelle
1

Wenn Sie speziell testen, dass ein bestimmter Fehler protokolliert wurde, warum nicht zwei Tests haben, einen, der sicherstellt, dass log.Error aufgerufen wird, und einen, der sicherstellt, dass log.ErrorFormat aufgerufen wird, gehe ich davon aus, dass Sie diesen kontrollieren können wird basierend auf der Eingabe aufgerufen.

Wenn Sie das eine oder andere noch überprüfen wollen, können Sie einfach diesen Ansatz verwenden, es macht genau das, was Sie brauchen:

Verify dass entweder die eine oder die andere Methode in einem Komponententest aufgerufen wurde

    
Bassam Mehanni 10.01.2013 00:24
quelle

Tags und Links