【发布时间】:2018-10-02 10:59:53
【问题描述】:
我是 C++ 的菜鸟。我的第一个学习项目使用 GoogleTest 和 GoolgleMock,但是,当然,我也是新手。我通过 NuGet 安装了 googletestmock.v.141 v101。我的主要应用程序 AstronomyCalculations 可以毫无问题地构建和运行。我的测试应用 GMock 在我尝试构建它时抛出了三个 LNK2019 错误。
严重性代码描述项目文件行抑制状态 错误 LNK2019 未解析的外部符号“public: __cdecl Easter::easter(void)”(??0easter@@QEAA@XZ) 在函数“private: virtual void __cdecl GET_THE_DATE_OF_EASTER_ShouldReturnDateOfEaster_Test::TestBody(void)”(?TestBody@GET_THE_DATE_OF_EASTER_ShouldReturnDateOfEaster @EEAAXXZ) GMock D:\Dev\Projects\AstronomyCalculations\GMock\GMock.obj 1
严重性代码描述项目文件行抑制状态 错误 LNK2019 未解析的外部符号“public: __cdecl Easter::~easter(void)”(??1easter@@QEAA@XZ) 在函数“private: virtual void __cdecl GET_THE_DATE_OF_EASTER_ShouldReturnDateOfEaster_Test::TestBody(void)”(?TestBody@GET_THE_DATE_OF_EASTER_ShouldReturnDateOfEaster @@EEAAXXZ) GMock D:\Dev\Projects\AstronomyCalculations\GMock\GMock.obj 1
严重性代码描述项目文件行抑制状态 错误 LNK2019 未解析的外部符号“public: struct tm __cdecl Easter::get_easter_date(int)const” (?get_easter_date@easter@@QEBA?AUtm@@H@Z) 在函数“private: virtual void __cdecl GET_THE_DATE_OF_EASTER_ShouldReturnDateOfEaster_Test::TestBody( void)" (?TestBody@GET_THE_DATE_OF_EASTER_ShouldReturnDateOfEaster_Test@@EEAAXXZ) GMock D:\Dev\Projects\AstronomyCalculations\GMock\GMock.obj 1
// AstronomyCalculations.cpp
int main() {
return 0;
}
// Easter.h
#pragma once
#include <ctime>
#include <string>
class easter
{
public:
easter();
~easter();
tm get_easter_date(int easter_year) const;
};
// Easter.cpp
#include "Easter.h"
easter::easter()
{
}
easter::~easter()
= default;
tm easter::get_easter_date(const int easter_year) const
{
const auto a = easter_year % 19;
const auto b = easter_year / 100;
const auto c = easter_year % 100;
const auto d = b / 4;
const auto e = b % 4;
const auto f = (b + 8) / 25;
const auto g = (b - f + 1) / 3;
const auto h = ((19 * a) + b - d - g + 15) % 30;
const auto i = c / 4;
const auto k = c % 4;
const auto l = (32 + (2 * e) + (2 * i) - h - k) % 7;
const auto m = (a + (11 * h) + (22 * l)) / 451;
const auto easter_month = (h + l - (7 * m) + 114) / 31;
const auto easter_day = ((h + l - (7 * m) + 114) % 31) + 1;
auto date_string = std::to_string(easter_year) +
"-" +
std::to_string(easter_month) +
"-" +
std::to_string(easter_day) +
" 00:00:00";
char date[20]; //a 1 char space for null is also required
strcpy_s(date, date_string.c_str());
tm ltm{};
char seps[] = " -:";
char *next_token = nullptr;
auto token = strtok_s(date, seps, &next_token);
ltm.tm_year = strtol(token, nullptr, 10);
token = strtok_s(nullptr, seps, &next_token);
ltm.tm_mon = strtol(token, nullptr, 10);
token = strtok_s(nullptr, seps, &next_token);
ltm.tm_mday = strtol(token, nullptr, 10);
token = strtok_s(nullptr, seps, &next_token);
ltm.tm_hour = strtol(token, nullptr, 10);
token = strtok_s(nullptr, seps, &next_token);
ltm.tm_min = strtol(token, nullptr, 10);
token = strtok_s(nullptr, seps, &next_token);
ltm.tm_sec = strtol(token, nullptr, 10);
ltm.tm_wday = 0;
return ltm;
}
// GMock.cpp
#include "stdafx.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "Easter.h"
int main(int argc, char** argv)
{
::testing::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
}
TEST(GET_THE_DATE_OF_EASTER, ShouldReturnDateOfEaster)
{
easter estr;
const auto result = estr.get_easter_date(2000);
ASSERT_EQ(result.tm_year, 2000);
}
【问题讨论】:
标签: c++ visual-studio-2017 googletest lnk2019 googlemock