我目前正在评估 Spec Explorer,但我遇到了一个关于函数行为抽象规范的问题。我有类似的东西:
[TypeBinding("Implementation.ImplementationElement")]
public class ModelElement
{ /*... */ }
public class ModelBehaviour
{
[Rule]
public static void doSomething()
{
ModelElement sel = SelectElement(elements);
// ... do something with sel
}
private static Set<ModelElement> elements = new Set<ModelElement>();
}
现在我不想SelectElement(Set<ModelElement> e)
在模型程序中明确定义。我宁愿用类似的后置条件来指定它elements.contains(\result);
。这有可能吗?
明确定义的问题是我会强制执行选择策略。
我试图通过以下方式避免这个问题(也许我只是错过了一些小东西,有人可以给我一个提示以正确地做到这一点):
- 添加一个参数
ModelElement e
到doSomething
- 添加条件
Condition.IsTrue(elements.Contains(e))
到doSomething
- 在配置脚本中定义一个动作
SelectElement
在 config-Script 中定义一台机器
SelectAndDo
,如下所示:machine SelectAndDo() : Main { let ImplementationElement e Where {.Condition.IsTrue(e.Equals(SelectElement()));.} in doSomething(e) }
- 使用
SelectAndDo
代替doSomething
但是,这不起作用,因为对相应模型的探索进入了错误状态。如果这根本不起作用,那么 Windows 上的 Spec Explorer 是否有一个很好的替代品,最好是稳定的?是否可以推荐 FsCheck 用于测试有状态系统?