![]() |
1
13
这就是所谓的 传感 Working Effectively With Legacy Code
因为我们讨论的是单元测试,所以这几乎不应该是真的—单元测试是真的
白盒
测试,并且代码应该在那里供您检查。除非它在某个封闭源代码的第三方库中,在这种情况下
更新:
你不能这样做,因为在现实生活中(非平凡的)程序中,没有合理的方法来检测方法调用是否没有副作用。你要找的是一些检查 整个宇宙 除了这个和这个小东西没有改变。即使从一个卑微的程序来看,这个宇宙也是 巨大的 . 一个方法调用可以创建/更新/删除任意数量的本地对象(其中许多甚至在单元测试环境中看不到)、在可用的本地/网络文件系统上触摸文件、执行DB请求、进行远程过程调用。。。 你不应该这样做,因为这是由你的同事在将来做出的改变来负责对他/她的改变进行单元测试。如果您不相信这会发生,那么您就遇到了人员或流程问题,而不是单元测试问题。 |
![]() |
2
3
是什么让你觉得你的同事也不会改变测试? |
![]() |
4
2
这个问题似是而非。这种情况在现实世界中不大可能发生。
这不是一段神秘代码的例子。你还知道什么是美洲狮。你总是知道什么是猫鼬。 这就是为什么我们要做回归测试。 http://en.wikipedia.org/wiki/Regression_testing
|
![]() |
5
1
我不使用这种语言编程,但以下是测试原始字符串是否被修改的一种方法:
|
![]() |
6
0
您可以从另一个角度来看待它,即通过为此代码编写单元测试,您强迫自己承认代码中的问题(副作用)。然后,您可以重新编写/重构代码,使其可测试,可能是通过移动
|
![]() |
7
0
|
![]() |
8
0
取决于你所说的副作用-我的意思是,也许PokeAround()做了一些重要的事情需要做。副作用如何分类? 不管怎样,我所知道的并没有什么特别的技术/技巧可以在单个单元测试中防止副作用,但是只要您对所有代码都有测试覆盖率,任何不需要的副作用都有希望被至少一个测试发现。 BDD/集成测试工具也有助于解决这个问题,因为它们(通常)测试更大的功能领域,而不仅仅是单个类/方法。 Design By Contract (DBC)。这允许您指定前置和后置条件,以及不变量,因此,如果使用无效参数调用方法、返回无效值或对象进入无效状态,则会引发某种错误。 |
![]() |
9
0
不可能。副作用的测试在任何测试阶段都是困难的。在不同的项目(产品开发、工具开发、业务应用开发、游戏开发等)中是不同的。 没有一个完整的回归测试副作用是找不到的。 在一个典型的项目(我经历过)中,“这个变更是否有任何副作用”这个问题经常在项目快结束时(即将上线)或者有人想在已经生产的系统中添加一个热修复程序时被问到。我发现在没有回归测试的情况下,惟一的(仍然有风险的)质量控制措施是代码评审。
|
![]() |
10
0
一种技术是随机排列单元测试的顺序。如果您的测试套件相当全面,那么随机化测试顺序可能会显示意外的副作用、错误地依赖于以前测试状态的测试,等等。 Google Test (对于C++)CAN do this ; 我不知道其他框架有这个特性。 |
![]() |
mg610 · 如何开始C++单元测试 2 年前 |
![]() |
Phil Gunning · 使用嵌套函数更改进行模拟测试 2 年前 |
![]() |
shilin agre · 在Python中测试修饰函数 2 年前 |
![]() |
SlipScout · Unittest只传递单个值,而不是获取多个值 2 年前 |
![]() |
Alex · 从实际对象的实例返回默认模拟结果 2 年前 |