Google Test возвращает значения мусора для рабочих операций - PullRequest
0 голосов
/ 11 марта 2020

Я тестировал .decreaseInventory () вручную в своем основном файле, поэтому я знаю, что он работает правильно, но когда я запускаю на нем тест Google, он не проходит и выдает ошибку. Как я могу это исправить?

Класс игрока:

#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;
}

test. 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));

}

Ошибка:

Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from playerTest
[ RUN      ] playerTest.decreaseInventoryTest
 Default Player Constructor
/home/hammad/se-02-team-21/tests.cpp:13: Failure
      Expected: curr_inv-3
      Which is: 9
To be equal to: p.decreaseInventory(3)
      Which is: 1740894128
[  FAILED  ] playerTest.decreaseInventoryTest (1 ms)
[----------] 1 test from playerTest (1 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (1 ms total)
[  PASSED  ] 0 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] playerTest.decreaseInventoryTest

 1 FAILED TEST

Почему это терпит неудачу и дает мусорное значение? Я уже использую конструктор по умолчанию, и в целом он работает правильно.

Ответы [ 2 ]

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

Вам не хватает возвращаемого значения в определении функции decreaseInventory. Чтобы исправить это, просто верните (измененное) значение переменной inventory:

int Player::decreaseInventory(int numOfBeers)
{
    inventory = inventory - numOfBeers;
    return inventory; // You need to return the modified value!
}
3 голосов
/ 11 марта 2020

Ваш метод:

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

Ваш тест:

EXPECT_EQ(curr_inv-3, p.decreaseInventory(3));

Макрос EXPECT_EQ сравнивает возвращаемое значение от p.decreaseInventory(3) с curr_inv-3. Метод ничего не возвращает.

Не возвращать что-либо из метода, который объявлен для возврата чего-либо, является неопределенным поведением. Ваш компилятор должен был предупредить вас об этом, и ваш тест прошел успешно в том смысле, что у вас есть неудачный тест, вызванный реальной ошибкой в ​​вашем коде, которую вы теперь можете исправить.

...