首页 > 解决方案 > 调用 EXPECT_CALL 时 GTest 失败

问题描述

我正在尝试为我的项目使用 GTest 框架。我创建了一个示例代码来使用测试夹具进行测试。

#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <iostream>

using testing::NiceMock;
using testing::Return;
enum class ValidationErrors : std::uint8_t
{
  kSuccess,
  kFailure,
};
class Validation
{
 public:
  Validation(int Alg)
  {}
  virtual ValidationErrors Initialize()
  {
    std::cout << __FUNCTION__ << std::endl;
    return ValidationErrors::kSuccess;
  }
  virtual ~Validation() = default;
};
class ValidationMock : public Validation
{
 public:
  ValidationMock() : Validation(1)
  {}
  MOCK_METHOD0(Initialize, ValidationErrors());
};

class Send
{
 public:
  Send()
  {}
  Send(int id, std::unique_ptr<Validation> validator) : validator_(std::move(validator))
  {
    std::cout << __FUNCTION__ << std::endl;
  }
  void Start(const std::uint32_t& size)
  {
    std::cout << __FUNCTION__ << std::endl;
    validator_->Initialize();
  }
  std::unique_ptr<Validation> validator_;
};

using NiceValidationMock = NiceMock<ValidationMock>;
class SendTextFixture : public testing::Test
{
 public:
  SendTextFixture() : validator_(std::make_unique<NiceValidationMock>())
  {
    sendClass_ = Send(5, std::move(validator_));
  }
  std::unique_ptr<NiceValidationMock> validator_;
  Send sendClass_;
};
TEST_F(SendTextFixture, DemoTest)
{
  sendClass_.Start(1);
  EXPECT_CALL(*validator_, Initialize()).WillOnce(Return(ValidationErrors::kSuccess));
  EXPECT_TRUE(true);
}

我有Start一个依赖于类的Validation类。因此,我为 .In Test Fixture 创建了一个 Mock 类,Validation我试图将其作为ValidationMock对象传递给Start类。在课堂上,我为方法ValidationMock创建了一个模拟。Initialize

在 TestCase 中,我尝试使用之后调用Initialize方法,但出现以下错误。EXPECT_CALL

1: [27630.783955]~DLT~  764~INFO     ~FIFO /tmp/dlt cannot be opened. Retrying later...
1: Running main() from gtest_main.cc
1: [==========] Running 1 test from 1 test case.
1: [----------] Global test environment set-up.
1: [----------] 1 test from SendTextFixture
1: [ RUN      ] SendTextFixture.DemoTest
1: Send
1: Start
1/1 Test #1: testpackage ......***Failed    0.32 sec

0% tests passed, 1 tests failed out of 1

Total Test time (real) =   0.32 sec

我无法理解确切的问题是什么。上述测试夹具方法是否有任何错误?

标签: c++unit-testinggoogletestgooglemock

解决方案


推荐阅读