代码测试:从正向到负向,捕获隐藏漏洞
在软件开发中,代码测试至关重要。当我们看到100%的代码覆盖率时,可能会觉得代码已经万无一失,但事实并非如此。本文将深入探讨负向测试,通过一系列操作来发现代码中隐藏的问题。
正向测试与负向测试
首先,我们已经完成了一些功能的开发,比如购物车结账功能。目前的代码已经具备以下特性:
- 商品通过唯一的非空字符串名称来识别。
- 商品列表长度不固定,但看起来非空,且商品没有特定顺序。
- 商品单价为整数,避免了浮点数精度丢失问题,例如可以假设价格以分为单位。
- 特殊价格只有在特定数量和类型的商品匹配时才会触发。
- 所有商品都有单价。
- 商品不一定有特殊价格。
然而,我们目前的测试大多是正向的“快乐路径”测试,即验证一切正常时的情况。这些测试基于支持的商品列表生成购买商品列表,缺乏对意外用例的测试。而负向测试则专门针对未充分定义的场景,探索在不太理想情况下会发生什么。
宽泛属性测试
我们先从一个非常宽泛的属性开始: checkout:total/3 函数应该返回一个整数且不会崩溃。以下是Erlang和Elixir的代码实现:
Erlang代码
prop_expected_result() ->
?FORALL({ItemList, PriceList, SpecialList}, lax_lists(),
try checkout:total(I
超级会员免费看
订阅专栏 解锁全文
2627

被折叠的 条评论
为什么被折叠?



