Лучший простой способ имитировать статическую / глобальную функцию?

У меня есть простой, почти подобный значениям класс, например Person:

class Person
{
public:
    Person(ThirdPartyClass *object);
    virtual ~Person(void);

    virtual std::string GetFullName() const;
    virtual int GetAge() const;
    virtual int GetNumberOfDaysTillBirthday() const;
};

Я использую стороннюю библиотеку, и ThirdPartyClass должен иметь глобальную / статическую функцию с именем Destroy (часть сторонней библиотеки) призвал его уничтожить его. Эта функция Destroy вызывается в деструкторе Person.

Теперь я пытаюсь выполнить модульное тестирование своего класса Person, и мне нужен способ имитировать / заглушить метод Destroy . Я думаю, что мог бы написать класс-оболочку вокруг статической функции Destroy , а затем использовать инъекцию зависимостей, чтобы внедрить эту оболочку в класс Person, но кажется излишним делать это, просто чтобы вызвать эту единственную функцию на этом простом класс. Какой простой способ сделать это? Или внедрение зависимостей действительно лучший способ сделать это?

Обновление

В конечном итоге я решил создать класс, который обернул все глобальные функции сторонней библиотеки, а затем использовал внедрение зависимостей для передачи этого класса в конструктор мой класс. Таким образом я мог бы отказаться от метода Destroy. Хотя класс человека использует только одну функцию, другие функции библиотеки вызываются в других точках моего кода, и, поскольку мне нужно было проверить их, я столкнулся бы с той же проблемой.

Я создаю единственный экземпляр этого класса-оболочки. в моем основном коде приложения и вставьте его там, где это необходимо. Я выбрал этот путь, потому что считаю его более понятным. Мне нравится решение Билли ONeal, и я думаю, что оно отвечает на мой вопрос, но я понял, что если я оставлю код на несколько месяцев и вернусь, мне понадобится больше времени, чтобы выяснить, что происходит, по сравнению с внедрением зависимостей. Мне вспоминается дзен афоризма питона «Явное лучше, чем неявное». и я чувствую, что внедрение зависимостей делает происходящее более явным.

9
задан jleahy 7 March 2013 в 17:59
поделиться