In unserem Projekt verwenden wir Google Mock, aber an mehreren Stellen machen wir Konstruktionen in unserem Produktionscode, nur um sicherzustellen, dass Klassen "mockbar" sind. Wir tun dies, weil wir die Vorteile von Google Mock nutzen möchten, aber andererseits möchten wir lieber einen optimalen Produktionscode haben. Der folgende Fall ist etwas, was wir oft machen und gerne loswerden möchten.Wie vermeidet man Zeiger mit Google Mock?
class A{
public:
void doSomething(); //Does something with _someB
void setSomeB(B* mockedB); //This is only here for GMock
private:
B* _someB; //This should not be a pointer, it is a pointer only for GMock
}
Dies ist nur ein vereinfachtes Beispiel, wie Sie sehen können, habe ich die Details weggelassen. Im Grunde wollen wir loswerden, dass B ein Zeiger ist. Der Grund, warum wir es als Zeiger haben, ist, dass wir B in unserem Testcode ableiten können (mock it) und setzen Sie es mit diesem Setter.
Gibt es eine Möglichkeit, dies zu vermeiden? Können wir nicht zulassen, dass B in der Klasse berücksichtigt wird?
Dank
Verwenden Sie intelligente Zeiger !!! –
@TonyTheLion, die das Objekt immer noch nicht auf dem Stapel leben lässt, es wird immer noch ein Zeiger sein, und ich würde immer noch den Setter brauchen. –
Google ist ziemlich Fan von Dependency-Injektion. Es macht Sinn, dass Sie es schwer haben würden, ihr Testframework ohne dieses Framework zu verwenden. Ich möchte Sie dazu ermutigen, sich ihre YouTube-Videoserie "The Clean Code Talks" anzusehen. Die eine, die die Grundlagen ihrer Unit-Test-Philosophie behandelt, kann hier gefunden werden: http://youtu.be/wEhu57pih5w – cgmb