Unit testing 单元测试指南
有人知道在哪里可以找到单元测试指南和建议吗?我想要一些能解决以下类型主题的东西(例如):Unit testing 单元测试指南,unit-testing,tdd,Unit Testing,Tdd,有人知道在哪里可以找到单元测试指南和建议吗?我想要一些能解决以下类型主题的东西(例如): 测试应该和应用程序逻辑在同一个项目中吗 我应该有测试类来镜像我的逻辑类,还是应该只有我认为需要的那么多测试类 我应该如何命名我的测试类、方法和项目(如果它们在不同的项目中) 应该测试私有、受保护和内部方法,还是只测试那些可公开访问的方法 单元测试和集成测试应该分开吗 是否有理由不进行100%的测试覆盖率 我不是在问我应该成为什么样的人吗 在线资源是最好的。我坚决推荐你们阅读,而且对于单个主题来说,问题太
- 测试应该和应用程序逻辑在同一个项目中吗
- 我应该有测试类来镜像我的逻辑类,还是应该只有我认为需要的那么多测试类
- 我应该如何命名我的测试类、方法和项目(如果它们在不同的项目中)
- 应该测试私有、受保护和内部方法,还是只测试那些可公开访问的方法
- 单元测试和集成测试应该分开吗
- 是否有理由不进行100%的测试覆盖率
在线资源是最好的。我坚决推荐你们阅读,而且对于单个主题来说,问题太多了。我推荐一本关于TDD的书 此外,您还需要访问该站点。他也有很多关于测试的好信息 我们非常重视TDD,所以我将从这个角度回答问题 测试应该和应用程序逻辑在同一个项目中吗 通常,我们将测试保持在同一个解决方案中,但我们将测试分解为单独的DLL/项目,这些DLL/项目反映了它们正在测试的DLL/项目,但维护名称空间,测试位于子名称空间中。示例:Common/Common.Tests 我应该有测试类来镜像我的逻辑类,还是应该只有我认为需要的那么多测试类 是的,您的测试应该在创建任何类之前创建,根据定义,您应该只单独测试单个单元。因此,解决方案中的每个类都应该有一个测试类 我应该如何命名我的测试类、方法和项目(如果它们在不同的项目中) 我想强调的是,行为是被测试的,所以我通常以SUT命名测试类。例如,如果我有一个用户类,我会这样命名测试类:
public class UserBehavior
应该命名方法来描述您期望的行为
public void ShouldBeAbleToSetUserFirstName()
项目可以按照您想要的方式命名,但通常您希望它非常明显地显示它正在测试哪个项目。请参阅前面关于项目组织的回答
应该测试私有、受保护和内部方法,还是只测试那些可公开访问的方法
同样,您希望测试能够断言预期的行为,就像您是被测试对象的第三方消费者一样。如果您测试内部实现细节,那么您的测试将是脆弱的。您希望您的测试能够给您重构的自由,而不必担心破坏现有功能。如果您的测试知道实现细节,那么如果这些细节发生更改,您将不得不更改测试
单元测试和集成测试应该分开吗
是的,单元测试需要与验收和集成测试隔离。关注点分离也适用于测试
是否有充分的理由不进行100%的测试覆盖率
我不会挂断100%代码覆盖率的事情。100%的代码覆盖率往往意味着测试中的某种质量水平,但这是一个神话。你可以进行糟糕的测试,但仍然可以获得100%的覆盖率。相反,我会依靠一种良好的考试第一心态。如果您总是在编写一行代码之前编写测试,那么您将确保100%的覆盖率,因此它将成为一个没有实际意义的点
一般来说,如果你专注于描述类的全部行为范围,那么你就没有什么可担心的了。如果您将代码覆盖率作为一个指标,那么懒惰的程序员只需做足够的工作就可以达到这个指标,而且您仍然会有糟糕的测试。相反,在测试也被审查的情况下,严重依赖同行审查。这是一个好问题。我们自己有机地种植,我想最好的方法就是这样。里面有点“视情况而定…” 我们在同一个项目中,在名为“Unites”的子命名空间中进行测试 我们的测试类反映了逻辑类,以简化跟踪测试位置与测试内容的关系 类的命名与它们所测试的逻辑类相似,方法的命名与它们所测试的场景相似 我们只为公共和内部方法编写测试(测试在同一个项目中),目标是95%的类覆盖率 我不想区分“单位”和“整合”。要花很多时间去弄清楚哪个是哪个…把那个包起来!考试就是考试 100%太难了,不可能一直做到。我们的目标是95%。在获得最终5%所需的时间和实际捕获量方面,回报也在减少 这就是我们,也正是我们适应了环境和节奏。你的年龄可能不同。想想你所处的环境和所涉及的个性 我期待着看到其他人对此有什么看法 按顺序:
- 不,通常最好将它们包含在单独的项目中;除非您希望能够在运行时运行诊断
- 理想的情况是100%的代码覆盖率,这意味着每个类中每个例程中的每一行代码
- 我选择ClassnameTest,ClassnameTest.MethodNameTestnumber
- 一切
- 我会说是的,因为如果单元测试失败,则不需要运行集成测试
- 只设置并获取字段的简单属性不需要测试