【发布时间】:2013-02-15 22:17:47
【问题描述】:
我目前正在评估 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 用于测试有状态系统?
【问题讨论】:
标签: c# testing specifications mbt