我已经在主文件中手动测试了.decreaseInventory(),所以我知道它可以正常工作,但是当我对其执行google测试时,它失败并给我一个错误。我该如何解决?
播放器类:
#ifndef PLAYER_H
#define PLAYER_H
#include <iostream>
using namespace std;
class Player
{
int inventory;
public:
Player();
int decreaseInventory(int numOfBeers);
int increaseInventory(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::increaseInventory(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/s/s/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
为什么它会失败并给出垃圾值?我已经在使用默认构造函数,并且通常它可以正常工作。
编辑:现在可以正常工作,但是如果我在一个测试中有两个测试,它将失败。例如:如果我注释掉第二个,但是如果我都尝试了,则它们将失败并给出此错误:
测试:
TEST(playerTest, increaseInventoryTest) {
Player p;
int curr_inv = p.getInventory();
EXPECT_EQ(curr_inv+3, p.increaseInventory(3));
EXPECT_EQ(curr_inv+1000000, p.increaseInventory(1000000));
}
错误:
Default Player Constructor
/home/s/s/tests.cpp:22: Failure
Expected: curr_inv+1000000
Which is: 1000012
To be equal to: p.increaseInventory(1000000)
Which is: 1000015
[ FAILED ] playerTest.increaseInventoryTest (0 ms)
[----------] 2 tests from playerTest (0 ms total)
[----------] Global test environment tear-down
[==========] 2 tests from 1 test case ran. (0 ms total)
[ PASSED ] 1 test.
[ FAILED ] 1 test, listed below:
[ FAILED ] playerTest.increaseInventoryTest
1 FAILED TEST
为什么在进行两次测试时行为会有所不同?
您的方法是:
int Player::decreaseInventory(int numOfBeers) { inventory = inventory - numOfBeers; }
您的测试是:
EXPECT_EQ(curr_inv-3, p.decreaseInventory(3));
宏EXPECT_EQ
将p.decreaseInventory(3)
返回的值与curr_inv-3
进行比较。该方法不返回任何内容。
不从已声明要返回内容的方法中返回内容是未定义的行为。您的编译器应该已经对此发出警告,并且您的测试失败了,因为您的测试失败是由代码中的实际错误引起的,您现在可以对其进行修复。
您在decreaseInventory
函数定义中缺少返回值。要解决此问题,只需返回inventory
成员变量的(已修改)值:
int Player::decreaseInventory(int numOfBeers)
{
inventory = inventory - numOfBeers;
return inventory; // You need to return the modified value!
}