Testing 如何决定何时和何时不创建集成测试

Testing 如何决定何时和何时不创建集成测试,testing,tdd,integration-testing,Testing,Tdd,Integration Testing,是否有一个确定的过程来决定应该为代码库中的哪些内容创建集成测试套件?我在说“我的这部分代码符合A标准,因此应该创建测试。我的这部分代码符合B标准,因此不应该创建测试。” 随着Rails应用程序规模的显著增长,我正在添加一些小功能(与总体结构相比),比如用户帐户上的一个字段,它指示是否允许用户为他或她自己创建约会,他或她需要家长这样做(我理解这一错误的含义可能很重要,但我只是试图阐明这一功能实现的细微之处) 集成测试应该是特定于现场的吗?如上述情况所述?还是应该更全面、更完整?一个清晰的“是”或“

是否有一个确定的过程来决定应该为代码库中的哪些内容创建集成测试套件?我在说“我的这部分代码符合A标准,因此应该创建测试。我的这部分代码符合B标准,因此不应该创建测试。”

随着Rails应用程序规模的显著增长,我正在添加一些小功能(与总体结构相比),比如
用户
帐户上的一个字段,它指示是否允许
用户
为他或她自己创建约会,他或她需要家长这样做(我理解这一错误的含义可能很重要,但我只是试图阐明这一功能实现的细微之处)


集成测试应该是特定于现场的吗?如上述情况所述?还是应该更全面、更完整?一个清晰的“是”或“否”过程集成测试的创建是我所寻找的。它存在吗?

没有办法决定是否编写一个不经思考就可以使用的集成测试。任何真正的应用程序都有细微差别和特殊情况,挑战任何规则。但肯定有一种通用方法可以使用除非您发现它不适合:使用验收测试作为集成测试的方法

旁注:我所说的“集成测试”指的是一种测试,它可以测试代码的多个层次,而不是Rails特有的含义,这种含义大部分被更好的方法和工具所包含。但是如果您使用Rails集成测试,我的答案是适用的

验收测试捕获一个重要的用户流。它也是一个集成测试,从UI一直到后端执行应用程序的所有层。行为驱动开发(BDD)类似的方法通过为所有重要的用户流编写验收测试来驱动从外到内的开发。验收测试编写复杂且运行缓慢,因此人们尝试编写尽可能少的验收测试,这仍然定义了所有重要的用户流

选择验收测试是一门艺术,但经验法则是,如果两个场景涉及不同的参与者和/或不同的主要系统组件(例如UI屏幕),则它们应该有单独的验收测试,如果没有,则它们是具有细节的同一场景,一个验收测试就足够了

验收测试有助于与利益相关者沟通(即记录要求),因此您需要它们,而不管您的测试策略的其余部分如何。但是,通常会发现,一整套验收测试就是您需要的所有集成测试。。不值得验收测试的详细需求可以在单元测试中表示

在您的示例中,我可能会为用户创建自己约会的场景编写一个验收测试,而为家长必须提供帮助的场景编写另一个验收测试,因为这两个场景截然不同

但第二种情况则截然不同:

When there is an unrestricted user "Dad"
And there is a restricted user "Billy" supervised by "Dad"
And there is a user "Stalker"
When "Billy" visits the new appointment page
And "Billy" creates a new appointment
And "Billy" visits his calendar
Then "Billy" sees a pending appointment

When "Stalker" visits "Billy"'s calendar
Then "Stalker" does not see an appointment

When "Dad" visits "Billy"'s calendar
And "Dad" approves the pending appointment
Then "Dad" sees an appointment

When "Billy" visits his calendar
Then "Billy" sees an appointment

When "Stalker" visits "Billy"'s calendar
Then "Stalker" does not see an appointment

另一方面,我可能不会为有位置和没有位置的场景编写两个不同的验收测试(假设位置只是一个可能填写也可能不填写的文本字段).单元测试可能就足够了。

如果你可以在没有错误的情况下进行小调整,那么你就不需要进行集成测试。但是,一旦你开始遇到2到3个错误,或者如果你预见自己会因为复杂性(使用你的直觉和经验)而遇到问题,那么你就需要测试。
一个比这更具体的实际公式是不可能的,因为测试旨在检测不应该存在的bug。因此,如果不检测bug(编写测试),就不可能知道它是否存在。

快速连续使用“阐明”和“清晰”的道具。
When there is an unrestricted user "Dad"
And there is a restricted user "Billy" supervised by "Dad"
And there is a user "Stalker"
When "Billy" visits the new appointment page
And "Billy" creates a new appointment
And "Billy" visits his calendar
Then "Billy" sees a pending appointment

When "Stalker" visits "Billy"'s calendar
Then "Stalker" does not see an appointment

When "Dad" visits "Billy"'s calendar
And "Dad" approves the pending appointment
Then "Dad" sees an appointment

When "Billy" visits his calendar
Then "Billy" sees an appointment

When "Stalker" visits "Billy"'s calendar
Then "Stalker" does not see an appointment