Mock nicht-virtuelle Methode C ++ (gmock)

8

Ich habe Klasse

%Vor%

Bitte können Sie helfen, MethodA() vorzuspielen, ohne virtuelle, Ich habe das Konzept der Injektion von High-Perf-Abhängigkeiten

nicht verstanden     
Sasi 25.04.2011, 11:05
quelle

3 Antworten

11

Es bedeutet, dass Sie Ihren Produktionscode templatisieren müssen. Verwenden Sie Ihr Beispiel:

CSumWind Klassendefinition:

%Vor%

Mocked CSumWnd -Klassendefinition:

%Vor%

Produktionsklasse, die mit der mocked Klasse CSumWind getestet werden muss. Jetzt wird es templated, um CSumWind class in Produktionscode und MockCSumWnd class in Tests bereitzustellen.

%Vor%

Instanziierung von TestedClass in der Produktion:

%Vor%

Instanziierung von TestedClass -Objekt in testbarer ausführbarer Datei:

%Vor%     
beduin 25.04.2011, 11:40
quelle
1

Versuchen CppFreeMock und einige andere erwähnt hier .

Beispiel:

%Vor%     
Louix 28.09.2014 04:38
quelle
0

Wenn Sie den vorhandenen Code nicht ändern möchten, finden Sie hier eine spezifische Lösung für VC ++, an der ich arbeite ( Ссылка ). Die kurzen Schritte sind:

  1. Nutzen Sie DbgHelp.h, um die Symbole und Speicheradressen einer Klasse aller Methoden abzurufen. Im Grunde ruft es zur Laufzeit Meta-Informationen aus der .pdb-Datei ab.
  2. Vergleiche das Benutzereingabe-to-mock-Methodensymbol mit der Ausgabe von Schritt 1, um die Speicheradresse der To-Mock-Methode zu erhalten.
  3. Nutzen Sie windows api WriteProcessMemory, um die Eingangsbytes der To-Mock-Methode zu ändern, die ähnlich ist wie: __asm ​​{move eax, 1; ret}.

Lassen Sie uns hier den Schlüsselcode eingeben.

  1. Ruft Methoden und Symbole einer Klasse ab. Unten ist die Schlüsselidee der Implementierung. Der vollständige Quellcode ist unter Ссылка

    verfügbar %Vor%
  2. Schritt 2 ist Trival. Es ist nur Textvergleich und Verarbeitung.

  3. Wie man den magischen Asm injiziert, um das Methodenverhalten zu ändern: (Der vollständige Quellcode ist verfügbar unter Ссылка )

    %Vor%
Jim Ma 28.05.2016 17:00
quelle

Tags und Links