可以说你有这个二叉搜索树(BST)。见下面的代码。属性:单元测试binarysearchtree
节点的左侧子树只包含键小于节点键的节点。
节点的右子树只包含密钥大于节点密钥的节点。
左右子树也必须是二叉搜索树。
你会如何测试它?您无法访问节点并且无法验证结构。您不能单独测试插入功能。
1)您可以从BST创建一个继承的测试类,并声明额外的方法来测试。这是常见的吗?
2)以不同方式实施BST。有一个树类。这个类可以访问子节点等,并实现基本的树功能。从Tree继承BST。在Tree提供的方法的帮助下测试BST。
3)您的意见?
谢谢。
template <typename ValueType>
class BinarySearchTree
{
public:
BinarySearchTree() : m_count(0), m_root(nullptr) {}
void Insert(const ValueType& elementToInsert);
bool Remove(const ValueType& elementToRemove);
bool Contains(const ValueType& elementToFind);
bool IsEmpty() const;
size_t Count() const;
ValueType Max() const;
ValueType Min() const;
int Delimiter() const;
void PrintToFile(std::ofstream& outFile);
void BuildFromFile(std::ifstream& inFile);
~BinarySearchTree() { delete m_root; }
// TODO: copy ctr, copy assignment operator, move ctr
private:
struct Node
{
Node(const ValueType& value) : value(value), parent(nullptr), left(nullptr), right(nullptr) {}
~Node() { delete left; delete right; }
// TODO: copy ctr, copy assignment operator, move ctr
ValueType value;
Node* parent;
Node* left;
Node* right;
};
Node* m_root;
int m_count;
};
真的很有趣的问题!但是,不幸的是,我认为它会很接近,因为太广泛了......但是,恕我直言,你必须将它测试为一个黑盒子:你通过插入,删除...输入刺激,并使用访问器来查看他有什么。另一种解决方案是使用一些单元测试库来测试你的代码以允许访问私人领域 – Garf365
约翰拉科斯(C++ std委员会)曾经写过一本关于[大规模C++设计]的书(https:// www。 amazon.com/Large-Scale-Software-Design-John-Lakos/dp/0201633620)。它广泛谈论关于可测试性的设计,你应该抓住它。 – StoryTeller