Попытка сослаться на удаленную функцию UnitTest - PullRequest
0 голосов
/ 26 июня 2018

Я хочу создать модульный тест для класса с помощью виртуального метода, который принимает параметр шаблона в качестве аргумента, и у меня возникают проблемы при компиляции моего кода. Я включил минимальный пример того, чего я пытаюсь достичь. Я не могу заставить его скомпилировать Что мне не хватает?

файл tst_templates.h.

    #include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <gmock/gmock-matchers.h>

#include "mockview.h"
#include "configuration.h"

using namespace testing;

class MyTest : public ::testing::Test
{
    public:

protected:

    FRIEND_TEST(MyTest, Print);

    virtual void SetUp()
    {


    }

    virtual void TearDown()
    {

    }
};

TEST_F(MyTest, Print)
{
   MockView<Configuration> View;
   Configuration c;
   View.Print(c);
}

Файл MockView.h

#ifndef MOCKVIEW_H
#define MOCKVIEW_H

#include <gmock/gmock.h>
#include "iview.h"

template <typename T>
class MockView : IView<T>
{
    public:
    MOCK_METHOD1_T(Print, void(const T &Settings));

    virtual ~MockView(){}
};

#endif // MOCKVIEW_H

Configuration.h

#ifndef CONFIGURATION_H
#define CONFIGURATION_H

#include "iconfiguration.h"
#include <iostream>

class Configuration : public IConfiguration
{
public:
    Configuration()
    {

    }

    void Print()
    {
        std::cout << "Configuration Print" << std::endl;
    }

    ~Configuration()
    {

    }
};

#endif // CONFIGURATION_H

IView.h

#ifndef IVIEW_H
#define IVIEW_H

template <typename T>

class IView
{
    virtual void Print(const T& settings) = 0;
    virtual ~IView(){}
};

#endif // IVIEW_H

enter image description here

1 Ответ

0 голосов
/ 26 июня 2018
template <typename T>
class IView
{
    virtual void Print(const T& settings) = 0;
    virtual ~IView(){}
};

Как class, методы Print и ~IView являются частными, и поэтому вы не можете получить к ним доступ даже из производного класса. Сделайте их public или измените class на struct, чтобы изменить видимость по умолчанию на public

...