Compile error gmock

Asked

Viewed 32 times

0

Good evening, I’m practiced testing on c++ used the google gtest/gmock testing library. Everything is working perfectly well with gtest, but I cannot compile in any way when I try to use gmock. To make sure that it is not my code that is in trouble, I decided to copy a piece of code used as an example in repository library.

    #include <gtest/gtest.h>
    #include <gmock/gmock.h>
    class Turtle {

        ~Turtle() = default;

        virtual void PenUp() = 0;

        virtual void PenDown() = 0;

        virtual void Forward(int distance) = 0;

        virtual void Turn(int degrees) = 0;

        virtual void GoTo(int x, int y) = 0;

        virtual int GetX() const = 0;

        virtual int GetY() const = 0;
    };

    class MockTurtle : public Turtle {
    public:

        MOCK_METHOD0(PenUp, void());

        MOCK_METHOD0(PenDown, void());

        MOCK_METHOD1(Forward, void(int distance));

        MOCK_METHOD1(Turn, void(int degrees));

        MOCK_METHOD2(GoTo, void(int x, int y));

        MOCK_CONST_METHOD0(GetX, int());

        MOCK_CONST_METHOD0(GetY, int());
    };
int main(int argc, char *arvg[]) {
    testing::InitGoogleTest(&argc, arvg);
    testing::InitGoogleMock(&argc, arvg);
    return RUN_ALL_TESTS();

}

However, even this code does not compile and get the following error: inserir a descrição da imagem aqui

Compiling 'main.cpp' ...
/snap/clion/37/bin/cmake/linux/bin/cmake --build /home/renan/CLionProjects/Testing/cmake-build-debug --target CMakeFiles/Testing.dir/main.cpp.o -- -j 2 -f /home/renan/CLionProjects/Testing/cmake-build-debug/CMakeFiles/Testing.dir/build.make --always-make
Building CXX object CMakeFiles/Testing.dir/main.cpp.o
In file included from /home/renan/CLionProjects/Testing/lib/googletest-master/googlemock/include/gmock/gmock-spec-builders.h:71:0,
                 from /home/renan/CLionProjects/Testing/lib/googletest-master/googlemock/include/gmock/gmock-generated-function-mockers.h:44,
                 from /home/renan/CLionProjects/Testing/lib/googletest-master/googlemock/include/gmock/gmock.h:62,
                 from /home/renan/CLionProjects/Testing/main.cpp:2:
/home/renan/CLionProjects/Testing/lib/googletest-master/googlemock/include/gmock/gmock-matchers.h:842:11: error: invalid use of template-name ‘testing::Matcher’ without an argument list
     const Matcher A();
           ^~~~~~~
/home/renan/CLionProjects/Testing/lib/googletest-master/googlemock/include/gmock/gmock-matchers.h:842:11: note: class template argument deduction is only available with -std=c++1z or -std=gnu++1z
In file included from /home/renan/CLionProjects/Testing/lib/googletest-master/googlemock/include/gmock/internal/gmock-internal-utils.h:45:0,
                 from /home/renan/CLionProjects/Testing/lib/googletest-master/googlemock/include/gmock/gmock-actions.h:47,
                 from /home/renan/CLionProjects/Testing/lib/googletest-master/googlemock/include/gmock/gmock.h:59,
                 from /home/renan/CLionProjects/Testing/main.cpp:2:
/home/renan/CLionProjects/Testing/lib/googletest-master/googlemock/include/gmock/internal/gmock-generated-internal-utils.h:50:7: note: ‘template<class T> class testing::Matcher’ declared here
 class Matcher;
       ^~~~~~~
In file included from /home/renan/CLionProjects/Testing/lib/googletest-master/googlemock/include/gmock/gmock-spec-builders.h:71:0,
                 from /home/renan/CLionProjects/Testing/lib/googletest-master/googlemock/include/gmock/gmock-generated-function-mockers.h:44,
                 from /home/renan/CLionProjects/Testing/lib/googletest-master/googlemock/include/gmock/gmock.h:62,
                 from /home/renan/CLionProjects/Testing/main.cpp:2:
/home/renan/CLionProjects/Testing/lib/googletest-master/googlemock/include/gmock/gmock-matchers.h: In member function ‘testing::internal::AnythingMatcher::operator testing::Matcher<A1>() const’:
/home/renan/CLionProjects/Testing/lib/googletest-master/googlemock/include/gmock/gmock-matchers.h:1052:40: error: ‘A’ was not declared in this scope
   operator Matcher<T>() const { return A<T>(); }

I wish someone would shed some light on what I’m doing wrong in mine testing. Grateful.

1 answer

0


After hours of headbanging, I solved the problem by simply changing the CMakeLists.txt at the root of the:

cmake_minimum_required(VERSION 3.12)
project(Testing)

set(CMAKE_CXX_STANDARD 14)

add_executable(Testing main.cpp domain/Auction.cpp domain/Auction.h domain/User.cpp domain/User.h domain/Bid.cpp domain/Bid.h service/Evaluator.cpp service/Evaluator.h builder/TestBuilder.cpp builder/TestBuilder.h domain/Payment.cpp domain/Payment.h persistence/FakeAuctionDAO.cpp persistence/FakeAuctionDAO.h persistence/AuctionDAO.cpp persistence/AuctionDAO.h service/Finisher.cpp service/Finisher.h)
add_subdirectory(lib/googletest-master)
include_directories(lib/googletest-master/googletest/include)
include_directories(lib/googletest-master/googlemock/include)
target_link_libraries(Testing gtest gtest_main)

for:

cmake_minimum_required(VERSION 3.12)
project(Testing)
set(CMAKE_CXX_STANDARD 14)

add_subdirectory(lib/googletest-master)
include_directories(lib/googletest-master/googletest/include)
include_directories(lib/googletest-master/googlemock/include)

add_executable(Testing main.cpp domain/Auction.cpp domain/Auction.h domain/User.cpp domain/User.h domain/Bid.cpp domain/Bid.h service/Evaluator.cpp service/Evaluator.h builder/TestBuilder.cpp builder/TestBuilder.h domain/Payment.cpp domain/Payment.h persistence/FakeAuctionDAO.cpp persistence/FakeAuctionDAO.h persistence/AuctionDAO.cpp persistence/AuctionDAO.h service/Finisher.h service/Finisher.cpp)

target_link_libraries(Testing gtest gtest_main)
target_link_libraries(Testing gmock gmock_main)

And that solved my problem.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.