Как я могу тестировать методы, которые сильно зависят от MFC с GTest - PullRequest
3 голосов
/ 01 ноября 2011

Я начал использовать GTest (Google Test) для проекта C ++, над которым я работаю. У меня есть один класс, который сильно зависит от MFC (CFile, CObject, CString и т. Д.).

Как я могу сломать зависимости от MFC (или минимизировать их), чтобы мне не нужно было создавать фиктивные объекты MFC только для запуска моих тестов? Я хочу проверить, что мои методы не функционируют MFC.

Вот пример метода, который я должен проверить:

// DumpContext class inherits from CDumpContext
void MyClass::Print(DumpContext &dc)
{

    // MyClass::Print real work goes here :
    ...

}

1 Ответ

1 голос
/ 03 ноября 2011

Насколько я понимаю, тот факт, что MFC не имеет интерфейсов, затрудняет имитацию.В качестве альтернативы вы можете унаследовать зависимость и попытаться извлечь из нее максимум пользы.В вашем примере вы можете использовать уже существующий CMemFile, который ничего не требует при построении и позволяет получить доступ к результату.

В других случаях вам придется изобретать что-то подобное самостоятельно.

class MyClass
{
public:
    void Print(CDumpContext &dc) {
        dc.DumpAsHex(5592);
        return;
    }
};

TEST(Demo_Test,MyClass)
{
    CMemFile File;
    CDumpContext DumpContext_Stubb(&File);
    MyClass Class;
    Class.Print(DumpContext_Stubb);
    EXPECT_GT(File.GetLength() ,0); // Do some test on the result
}
...