
适用范围:先明确测试对象
区块链测试涉及不同对象。以太坊开发文档讨论智能合约的功能验证与安全检查;比特币开发文档介绍应用测试所用的测试网络和回归测试环境。两者分别回答如何检查代码、如何控制实验条件,不能直接互相替代。以下误区主要适用于智能合约及区块链应用测试。
误区一:测试全部通过就代表安全
以太坊开发文档介绍了单元测试、集成测试及自动化与人工检查的互补关系,也强调部署前测试的重要性。测试通过说明实际检查的行为符合预期,结论受输入、断言和执行路径限制。

例如,仅验证一次正常调用成功,无法说明非法输入一定被拒绝。设计用例时,需要同时明确成功条件、失败条件,以及失败后应保持不变的状态。

误区二:覆盖率高就意味着检查充分
覆盖率用于观察哪些代码在测试中执行过,但执行过某条语句,与验证其结果正确是两件事。如果测试调用了状态更新函数,却没有核对更新后的数据,相关代码可能已被覆盖,错误仍可能遗漏。
覆盖率适合寻找未触及的路径;判断测试质量,还需要检查断言是否对应业务规则,以及边界条件是否得到验证。
误区三:单元测试可以替代完整流程测试
单元测试适合定位独立函数的问题,集成测试适合检查函数之间或合约之间的交互。组件分别通过检查,不足以证明组合后的流程正确。
对于包含多个步骤的业务,应验证前一步产生的状态能否被后一步正确使用。只测合法输入也会留下缺口,异常输入、重复调用和时间边界同样需要对应的预期结果。
误区四:自动化工具可以取代人工判断
自动化适合重复执行明确的检查,但工具可能漏报,也可能产生误报。人工检查能够结合业务含义审视假设,同样受到经验与精力限制。
适用方式是让自动化持续验证已明确的规则,再由人工分析异常结果和规则遗漏。工具没有报警,不能单独构成安全结论。
误区五:测试网络表现等同于主网表现
比特币开发文档区分公共测试网络与regtest:前者用于测试网络交互,后者允许开发者控制出块时机,便于建立可重复的实验环境。环境可控程度不同,适用问题也不同。
常见问题是是否选一种环境就够了。需要稳定复现状态变化时,可控环境更合适;需要观察公共网络交互时,则应补充相应测试。在某个环境中成功,只能支持该环境及其条件下的结论,不能自动推导为主网运行保证。