4

たとえば、Reductio (Java/Scala 用) やQuickCheck (Haskell 用) などです。私が考えている種類のフレームワークは、組み込みデータ型の「ジェネレーター」を提供し、プログラマーが新しいジェネレーターを定義できるようにするものです。次に、プログラマーは、適切な型の変数をパラメーターとして取り、何らかのプロパティをアサートするテスト メソッドを定義します。次に、フレームワークはパラメーターのランダム データの束を生成し、そのメソッドの何百ものテストを実行します。

たとえば、Vector クラスを実装し、そこに add() メソッドが含まれていた場合、追加が正常に動作することを確認したいと思うかもしれません。したがって、(疑似コードで)次のように記述します。

boolean testAddCommutes(Vector v1, Vector v2) {
    return v1.add(v2).equals(v2.add(v1));
}

2 つの特定のベクトルに対して testAddCommutes() を実行して、追加が交換されるかどうかを確認できます。しかし、testAddCommutes の呼び出しをいくつか記述する代わりに、任意のベクトルを生成する手順を記述します。これにより、フレームワークは何百もの異なる入力に対して testAddCommutes を実行できます。

これは誰にとっても鐘を鳴らしますか?

4

4 に答える 4

4

FsCheckがあります。これは、QuickCheckからF#、つまりC#へのポートですが、ほとんどのドキュメントはf#用のようです。私も自分でアイデアを模索してきました。参照: http: //kilfour.wordpress.com/2009/08/02/testing-tool-tour-quicknet-preview/

于 2009-10-09T09:42:08.037 に答える
1

私の以前の発言を詳しく説明すると、疑似コードの例をテストするための QN コードは次のようになります。

新しい TestRun(1, 1000)
    .AddTransition(new MetaTransition<Input<Vector, Vector>, Vector>
    {
        名前 = "ベクトル加算 ",
        ジェネレーター = DoubleVectorGenerator、
        実行 = 入力 => input.paramOne.Add(input.paramTwo)
    }
    .RegisterProperty(
        (入力、出力) =>
            新しい QnProperty(
                "コミュニケートです",
                () => QnAssert.IsTrue(出力 == 入力.paramTwo.Add(入力.paramOne) )
            )
        )
    )
    。確認()
    .RethrowLastFailureifAny()
    .ReportPropertiesTested(新しい ConsoleReporter());

ここで、DoubleVectorGenerator は、タイプ Input<Vector, Vector> の値を提供するユーザー定義クラスです。

于 2009-10-16T22:12:33.320 に答える
1

私も正しく理解していないかもしれませんが、PEXが役に立つかもしれません。

于 2008-09-17T01:58:40.133 に答える
-1

私はあなたを正しく理解していないかもしれませんが、これをチェックしてください...

http://www.ayende.com/projects/rhino-mocks.aspx

于 2008-09-16T22:04:47.950 に答える