0

我已经阅读了很多关于单元测试的内容,并且第一次强烈考虑将它与 C++ 和 TDD 一起使用。我遇到的问题是,在我在创建测试时看到的所有示例中,当我考虑如何开始为我即将开发的项目编写测试时,它们显得太琐碎了。可能是我错过了单元测试的要点,所以如果是这种情况,请告诉我。

一个函数很容易理解,例如检查素数。它有一个简单的输入(要测试的数字)和一个简单的输出(真或假)。在这里很容易理解和创建单元测试。

现在,让我们以一个防火墙应用程序为例,它有一个规则配置文件和一个评估引擎,用于以特定顺序评估这些规则,用于特定输入;网络数据包的详细信息,例如 IP、子网、端口、域等。

在不编写单元测试的情况下,我会考虑首先编写一个解析器来将规则配置文件解析为类,然后编写一个规则引擎来将给定的网络数据包与这些类中的规则进行比较,按照它们被解析的顺序逐步执行规则直到找到匹配项。

单元测试和 TDD 规定,在编写代码之前,应该首先编写失败的测试。因此,在防火墙项目的情况下,您是从编写测试开始,通过创建一个模拟文件来提供一组特定的规则来检查文件的解析,还是这只是测试文件的读取,这通常不是推荐用于单元测试,而不是集成测试?如果要在这里进行测试,应该测试什么?

另外,如何考虑为这样的规则引擎编写测试来评估规则?如果输入网络数据包的详细信息,则输出将是数据包是否被接受、拒绝或忽略。这样的测试几乎与规则引擎所做的相同,那么如何将其分解为小的“单元”测试呢?

4

1 回答 1

1

您需要对解析器进行测试。对于给定的输入字符串,确保出现正确的规则对象。这不会访问文件,因为您的解析器不应该与文件 I/O 紧密耦合。

您需要对每条规则进行测试。确保规则为给定的数据包提供了您想要的结果。这可能是最重要的部分;一定要彻底测试边缘情况。您希望这些规则中的任何一个行为不端,因为它们会受到恶意输入的轰炸。

你需要对规则系统进行测试。编写简单的测试规则并使用它们来确保规则系统正确分派数据包并对响应采取行动。

所有这些都可以在实际代码之前轻松编写。

于 2013-08-28T09:30:54.850 回答