Unit testing 测试单元测试&x27;辅助方法

Unit testing 测试单元测试&x27;辅助方法,unit-testing,testing,tdd,Unit Testing,Testing,Tdd,当我编写测试时,其中一些测试有很多逻辑性。这种逻辑中的大部分可以很容易地进行单元测试,这将在测试中提供更高级别的信任 我可以看到一种方法来做到这一点,这将是创建一个类TestHelpers,放入/classes,并为TestHelpers编写测试以及常规测试 我在网上找不到关于这种做法的任何意见,可能是因为这个问题的关键词很棘手(“测试对测试”) 我想知道这听起来是否是一个好的做法,人们是否已经这样做了,是否有任何建议,这是否指向糟糕的设计,或类似的东西 我在做特性测试时遇到了这个问题。我知道有

当我编写测试时,其中一些测试有很多逻辑性。这种逻辑中的大部分可以很容易地进行单元测试,这将在测试中提供更高级别的信任

我可以看到一种方法来做到这一点,这将是创建一个类TestHelpers,放入/classes,并为TestHelpers编写测试以及常规测试

我在网上找不到关于这种做法的任何意见,可能是因为这个问题的关键词很棘手(“测试对测试”)

我想知道这听起来是否是一个好的做法,人们是否已经这样做了,是否有任何建议,这是否指向糟糕的设计,或类似的东西

我在做特性测试时遇到了这个问题。我知道有一些框架,但我自己写,因为它没有那么复杂,它让我更清晰。此外,我可以想象,人们很容易在单元测试中遇到同样的问题

举个例子,我正在测试一个函数,该函数连接到Twitter的API服务并检索一些数据。为了测试数据是否正确,我需要测试它是否是json编码的字符串,结构是否与twitter的数据结构匹配,每个值是否具有正确的类型,等等。对检索到的数据执行所有这些检查的函数本身通常会感兴趣


对这种做法有什么想法或意见吗?

我认为测试本身太难了。阿尔法辛:好吧,那么谁会一次又一次地测试呢?你在这个话题上找不到太多的信息,这绝非巧合。那是因为这不是一种常见的做法。通常,写得好的测试应该包括测试本身的安排逻辑。但我理解你的愿望——如何确保考试“写得好”?这里最危险的事情是通过测试,通常应该失败(但由于其中的错误而通过)。有这样的测试比根本没有测试更糟糕。但老实说,我在实践中没有太多这样的案例。我的建议是专注于编写覆盖逻辑所有执行路径的良好测试,我认为你会没事:)

关于TDD的格言之一是“测试测试代码,代码测试测试测试。”也就是说,由于红绿重构周期,你会看到代码测试失败,然后在使其工作后,您可以看到它通过了测试——仅此一点就足以让您对测试(以及它调用的所有测试实用程序代码)正常工作充满信心。对于特征化测试,您没有这种红-绿重构周期,因此为测试实用程序方法编写测试可能对您很有价值。

虽然听起来有点反常,但我有时会为一些测试基础架构编写自动化测试,如果它变得相当复杂的话。然后,测试这个测试基础设施的测试往往很简单,所以根据我的经验,“为测试测试测试怎么样?”这个问题变得毫无意义

请注意,这主要发生在一个库中,该库专门用于帮助其他人(在本例中是编写Qt应用程序的人)进行测试,尽管我以前为一些独立应用程序做过这样的测试:例如,在为Kate的Vim mode的自动完成集成编写测试时,用于模拟各种配置的自动完成的伪自动完成测试助手代码变得足够复杂,以至于我实际上首先开始开发它的测试


而且可能值得一提的是,例如,Google Mock有数百个为它编写的测试:)

那么什么将为测试测试测试您的测试呢?:)