我已经阅读了很多关于单元测试的内容,并且第一次强烈考虑将它与 C++ 和 TDD 一起使用。我遇到的问题是,在我在创建测试时看到的所有示例中,当我考虑如何开始为我即将开发的项目编写测试时,它们显得太琐碎了。可能是我错过了单元测试的要点,所以如果是这种情况,请告诉我。
一个函数很容易理解,例如检查素数。它有一个简单的输入(要测试的数字)和一个简单的输出(真或假)。在这里很容易理解和创建单元测试。
现在,让我们以一个防火墙应用程序为例,它有一个规则配置文件和一个评估引擎,用于以特定顺序评估这些规则,用于特定输入;网络数据包的详细信息,例如 IP、子网、端口、域等。
在不编写单元测试的情况下,我会考虑首先编写一个解析器来将规则配置文件解析为类,然后编写一个规则引擎来将给定的网络数据包与这些类中的规则进行比较,按照它们被解析的顺序逐步执行规则直到找到匹配项。
单元测试和 TDD 规定,在编写代码之前,应该首先编写失败的测试。因此,在防火墙项目的情况下,您是从编写测试开始,通过创建一个模拟文件来提供一组特定的规则来检查文件的解析,还是这只是测试文件的读取,这通常不是推荐用于单元测试,而不是集成测试?如果要在这里进行测试,应该测试什么?
另外,如何考虑为这样的规则引擎编写测试来评估规则?如果输入网络数据包的详细信息,则输出将是数据包是否被接受、拒绝或忽略。这样的测试几乎与规则引擎所做的相同,那么如何将其分解为小的“单元”测试呢?