В нашем проекте мы используем Google Mock, но во многих местах мы делаем конструкции в нашем производственном коде только для того, чтобы классы были «мокабельными». Мы делаем это, потому что хотим использовать преимущества 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
}
Как видите, это всего лишь упрощенный пример, подробности я не упомянул. По сути, мы хотим избавиться от B как указателя. Причина, по которой мы используем его в качестве указателя, заключается в том, что мы можем создать подкласс B в нашем тестовом коде (смоделировать его) и установить его с помощью этого установщика.
Есть ли способ избежать этого? Разве мы не можем позволить B быть ограниченным в классе?
Спасибо
A
создатьB
в стеке, а затем зависимость внедрить его в классA
в качестве ссылки. Кроме того, когда вы говорите об оптимальном производственном коде, это преждевременная оптимизация? - person User   schedule 27.04.2012