CMake для Google Test - PullRequest
       15

CMake для Google Test

2 голосов
/ 11 марта 2020

Я пытаюсь следовать этому руководству для запуска файла Google Tests, но у меня возникли некоторые проблемы с CMakeLists.txt.

https://www.eriksmistad.no/getting-started-with-google-test-on-ubuntu/

CMakeLists.txt:

cmake_minimum_required(VERSION 2.6)

# Locate GTest
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})

# Link runTests with what we want to test and the GTest and pthread library
add_executable(runTests tests.cpp)
target_link_libraries(runTests ${GTEST_LIBRARIES} pthread)

Что такое здесь runTests? Это основной () файл моей программы? Как мне заменить его в соответствии с моей программой? В настоящее время у меня возникает эта ошибка, когда я использую make:

/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
CMakeFiles/runTests.dir/build.make:95: recipe for target 'runTests' failed
make[2]: *** [runTests] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/runTests.dir/all' failed
make[1]: *** [CMakeFiles/runTests.dir/all] Error 2
Makefile:83: recipe for target 'all

main. cpp: (Я пытался переместить эту часть в конец тестов. Файл cpp тоже, но все еще не сделал ' t работа)

#include <iostream>
#include "Player.h"
#include "gtest/gtest.h"

using namespace std;

int main(int argc, char **argv) 
{
   ::testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
}

Player.h

#ifndef PLAYER_H
#define PLAYER_H

#include <iostream>  
using namespace std;

class Player
{

    int inventory;

public:
    Player();
    int decreaseInventory(int numOfBeers);
    void setInventory(int newInventory);
    int getBackOrder();
    int getCost();
    int getInventory();

    bool operator ==(Player& p);
};

Player::Player()
{
    cout << " Default Player Constructor\n";
    inventory = 12;
    backorder = 0;
    cost = 0;
    orderDelay = 0;
    shipmentDeplay = 0;
}

void Player::setInventory(int newInventory)
{
    inventory = newInventory;
}

int Player::decreaseInventory(int numOfBeers)
{
    inventory = inventory - numOfBeers;
}

int Player::getInventory()
{
    return inventory;
}


#endif

тесты. cpp

#include "gtest/gtest.h"
#include "Player.h"

TEST(playerTest, decreaseInventoryTest ) {

    Player p;
    int curr_inv = p.getInventory();
    EXPECT_EQ(curr_inv-3, p.decreaseInventory(3));

}

Как я могу запустить свои тесты?

1 Ответ

2 голосов
/ 11 марта 2020

что такое здесь runTests? Это основной () файл моей программы? Как мне заменить его в соответствии с моей программой?

runTests - это имя исполняемого файла, который вы пытаетесь создать. Для него требуется main, как и для любого исполняемого файла, и есть два варианта: 1) написать свой или 2) использовать тот, который предоставляется в gtest. Если вы хотите go с опцией 1, добавьте main.cpp к строке add_executable.

add_executable(runTests tests.cpp main.cpp)

На мой взгляд, лучшим вариантом является использование main, предоставленное GTest, поскольку оно дает вам несколько аргументов командной строки. Вы можете использовать это, добавив его в target_link_libraries строку.

target_link_libraries(runTests ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} pthread)
...