現在、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
- config-script でアクションを定義する
SelectElement
SelectAndDo
次のように構成スクリプトでマシンを定義します。machine SelectAndDo() : Main { let ImplementationElement e Where {.Condition.IsTrue(e.Equals(SelectElement()));.} in doSomething(e) }
SelectAndDo
の代わりに使用doSomething
ただし、対応するモデルの探索がエラー状態になるため、これは機能しません。これがまったく機能しない場合、Windows の Spec Explorer に代わる、できれば安定した代替手段はありますか? ステートフル システムのテストに FsCheck を推奨できますか?