c++ - 为 get 函数编写一个 gtest
问题描述
我不知道如何解决这个问题我正在尝试找到为这些函数编写 gtest 的最有效方法。我不知道我是否在测试中正确调用了类和对象,而且我不确定我是否需要设置器才能设置字符串值,甚至不确定如何使用多个字符串进行设置
#include "Datetime.h"
#include <string>
#include <vector>
using namespace std;
class Task
{
private:
Date date;
Date deadline;
Vector<Task*> subtasks;
string tag;
string description;
int priority;
public:
DateTime get_date() {return date;}
DateTime get_deadline() {return deadline;}
Vector<Task*> get_subtask() {return subtasks;}
string get_tag() {return tag;}
string get_description() { return description;}
int get_priority() {return priority;}
void add_subtask(Vector<Task*> subtasks) {subtasks.push_back(subtasks);}
void remove_subtask(Vector<Task*> subtasks) {subtasks.erase(tasks.begin() + i);}
};
解决方案
您的add_subtask
和remove_subtask
函数似乎有一个令人困惑或不正确的签名。也许尝试为这些编写测试会有所帮助?
目前,与子任务相关的签名是:
class Task
{
public:
/* ... */
Vector<Task*> get_subtask() {return subtasks;}
void add_subtask(Vector<Task*> subtasks); // Why multiple subtasks
void remove_subtask(Vector<Task*> subtasks); // Impl was wrong
};
我认为这样的签名可能更有意义:
class Task
{
public:
/* ... */
Vector<Task*> get_subtasks() const { return subtasks; }
// Add one subtask. Throws an exception if `subtask` is `this`.
void add_subtask(Task* subtask);
// Remove the indicated subtask, if it is present, and return
// whether it was removed.
bool remove_subtask(Task* subtask);
};
在此之后,您可以编写如下测试:
TEST(TaskTest, SubtasksInitiallyEmpty) {
// When a Task is initially constructed, it has no subtasks.
Task t;
const std::vector<Task*> subtasks = t.get_subtasks();
EXPECT_TRUE(subtasks.empty());
}
TEST(TaskTest, AddSubtask) {
// When `add_subtask` is called with a user-provided task,
// the task’s subtasks contains that task.
Task t;
Task s;
t.add_subtask(&s);
const auto& subtasks = t.get_subtasks();
ASSERT_EQ(subtasks.size(), 1);
EXPECT_EQ(subtasks.front(), &s);
}
TEST(TaskTest, AddSelfAsSubtaskThrows) {
// When `add_subtask` is called with `this` as an argument,
// an exception is thrown.
Task t;
EXPECT_THROW(t.add_subtask(&t), std::runtime_error);
}
我没有包括 的测试remove_subtask
,但它们会有类似的结构。
推荐阅读
- react-native - React-native-razorpay 错误代码及其描述
- node.js - 如何使用电子将动态安装的vue插件加载到插件文件夹中
- html - Is there a way to make my components fully reusable in angular?
- javascript - 如何通过单击删除它..?
- cloudflare - Cloudflare Status API - 哪个组件检查问题?
- css - React styled-component,动画:反转两个div的位置
- php - 如何根据用户名获取角色名?
- angular - Angular 6 网站无法在 IE 上运行,但可以在所有浏览器上本地运行
- regex - 使正则表达式在所需字符串的中间接受连字符/破折号
- elasticsearch - 弹性栈的 Basic Free(不是 OSS)docker 镜像能否用于商业组织的产品开发?