unit-testing - 准备单元测试 : What's important to keep in mind when working on a software architecture?

标签 unit-testing software-quality

<分区>

假设我要开始一个新项目,质量是重中之重。

我计划进行广泛的单元测试,当我在架构上工作以简化和授权进一步的单元测试时,需要牢记哪些重要事项?

编辑:我前段时间读过一篇文章(我现在找不到了),它谈到在单元测试时如何将实例化代码与类行为解耦是有帮助的。这就是我在这里寻找的设计技巧。

最佳答案

通过能够用测试代码(模拟、伪造等)替换您的方法所具有的尽可能多的依赖关系,可以简化测试。目前推荐的实现此目的的方法是通过依赖倒置,也就是好莱坞原则:“Don调用我们,我们会调用你。”换句话说,您的代码应该“要求事物,而不是寻找事物”。

一旦您开始以这种方式思考,您就会发现代码很容易对许多事物产生依赖。您不仅依赖于其他对象,还依赖于数据库、文件、环境变量、操作系统 API、全局变量、单例等。通过坚持良好的架构,您可以通过适当的层提供这些依赖性,从而最大限度地减少这些依赖性。因此,当需要进行测试时,您不需要充满测试数据的工作数据库,只需将数据对象替换为模拟数据对象即可。

这也意味着您必须从对象执行中仔细梳理对象构造。放置在构造函数中的“new”语句会生成一个很难用测试模拟替换的依赖项。最好通过构造函数参数传递这些依赖项。

此外,请牢记得墨忒耳法则。不要深入一个对象超过一层,否则你会创建隐藏的依赖关系。调用 Flintstones.Wilma.addChild(pebbles);意味着您认为是对“摩登原始人”的依赖实际上是对“摩登原始人”和“威尔玛”的依赖。

关于unit-testing - 准备单元测试 : What's important to keep in mind when working on a software architecture?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2151726/

相关文章:

unit-testing - 如何在项目中作为 "QA Engineer"而不是 "Test Driven Development Team"的成员?

unit-testing - 如何对与 Elasticsearch 交互的 go 代码进行单元测试

python - Magento 的 pyUnit 单元测试是个好主意吗?

unit-testing - 如何在 Karma 上使用 Jasmine 将模拟依赖项注入(inject) Angular 指令

java - 您如何评价以下 java 解决方案或者您将如何解决它?

software-quality - 寻找软件质量的客观指标

c++ - 哪些测试框架不会替换 "new"和 "malloc"?

c# - 为 if else 语句编写单元测试

jenkins - 如何正确使用Jenkins警告下一代插件的三个步骤?

c++ - gcc 静态分析器 (Weffc++) : exclude directories