定向属性:原理、应用与优化
1. 理解定向属性
在测试中,我们编写的属性通常与生成器紧密耦合,不同的属性往往需要特定的生成器。一般来说,通用生成器在进行广泛扫描时更有用,但很难有一个生成器能满足所有需求,因为我们需要在一定程度上控制随机性。
定向属性是一种特殊的属性,它允许我们使用通用生成器,并在属性内部对其进行专门化,从而生成与属性更相关的数据。与常规属性不同,定向属性的每次迭代可以影响后续迭代的数据生成,并且属性本身可以向PropEr提供反馈,指示搜索是否朝着正确的方向进行。
2. 定向属性的外观
在外观上,定向属性与常规属性非常相似。在PropEr v1.3.0或更高版本中,只需使用 ?FORALL_TARGETED(Pattern, Generator, Property) 宏,而不是 ?FORALL(Pattern, Generator, Property) 宏。
以下是一个简单的路径生成器示例:
-module(prop_target).
-include_lib("proper/include/proper.hrl").
-compile(export_all).
path() -> list(oneof([left, right, up, down])).
prop_path() ->
?FORALL_TARGETED(P, path(),
begin
{X,Y} = lists:foldl(fun move/2, {
超级会员免费看
订阅专栏 解锁全文
1354

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



