質問

私は、オブジェクトのデータではなく、オブジェクト自体をモックアップしたいと思います。言い換えれば、私は、n個のオブジェクトのコレクションを生成し、ランダムなデータ列や数値を生成する関数に渡したいと思います。これを行うには何がありますか? Loremのイプサムのオブジェクトデータ用として考えてください。などの数値範囲の周りの制約は必要ありませんが、ボーナスになります。

役に立ちましたか?

解決

私はあなたの質問を読んだとき、私は考える最初の事はQuickCheck、Haskellのためのテストツールでした。 QuickCheckでは、あなたの関数が持つべき性質(不変条件)を指定し、入力の有効範囲を指定することができます(プラス束がより多くの機能)、およびQuickCheckはランダムな入力データの束を生成し、あなたの機能でそれを投げると、あまりにも参照をチェックします出力は、仕様と一致した場合。少し私の周りNosingはQuickCheckは、.NETの世界に存在するので、それのF#のポートがある判明ます:

http://fscheck.codeplex.com/する

MS研究プロジェクトPexが近くにあなたが何を考えているのかもしれないものもあります

http://research.microsoft.com/en-us/projects/Pex /

「... Pexが、あなたが高いコードカバレッジを持つ小さなテストスイートとして保存することができ、あなたの方法の興味深い入力 - 出力値を、見つけた。マイクロソフトペックスは、Visual Studioのアドインのテストの.NET Frameworkアプリケーションのためです。」

私は前にそれを使用していないが、それは機能の任意およびすべての枝を行使するエッジケースデータを生成するための良いようにそれが見えました。それは実際にちょうどそれを真にランダムなものを投げるのではなく、機能を分析します。

他のヒント

また、Rubyで偽のデータオブジェクトをリギングするために使用の多くを取得するRubyのFaker宝石、の.NETポートがあるように見えます。私はそれを使用していないが、それは価値に見ているかもしれません。

https://github.com/slashdotdash/faker-csする

私は、誰もが AutoFixture にはまだ言及していないことに驚いています

[TestMethod]
public void IntroductoryTest()
{
    // Fixture setup
    Fixture fixture = new Fixture();

    int expectedNumber = fixture.CreateAnonymous<int>();
    MyClass sut = fixture.CreateAnonymous<MyClass>();
    // Exercise system
    int result = sut.Echo(expectedNumber);
    // Verify outcome
    Assert.AreEqual<int>(expectedNumber, result, "Echo");
    // Teardown
}
オブジェクトの配列をとる

あなたでしセットアップObjectRandomizerクラスは、プライベートメンバーのためのオブジェクトを検討し、そのメンバーのランダムな値を設定するためにリフレクションを使用するためにリフレクションを使用しています。これは、あなたがオブジェクトごとのようなものをランダムデータルックスを気にしない場合にのみ機能します。

また、あなたは彼らのためにランダムデータを生成し、各データオブジェクトのクラスのセットを構築することができます。あなたは、実際のアセンブリ内のランダム生成方法を含めることを望まなかった場合、これはうまくいくかもしれません。あなたはPersonクラスを持っていた場合たとえば、あなたは試験アセンブリにPersonRandomizerクラスを持つことができます。あなたのテストクラス(またはRandomizerクラス内)では、あなたはその後、型PersonRandomizerを見つけるためにリフレクションを使用することができ、それが存在する場合、コールPersonRandomizer.Randomize(Person p)ます。

あなたはヤヒヤの提案で行く場合は、私はサポートのランダム化そのオブジェクトのためのインタフェースIRandomizableを作成したり、実行時に検出することができる新しい属性Randomizableでそれらをマーク勧めます。

私は、私はちょうど私はそれがこれを行い作成するすべてのクラスにメソッドを追加し、ランダム化、それを呼び出すテストのために

。各クラスは、そのクラスのオブジェクトのための法的なデータがどのように見えるかを知っています。オブジェクトを作成した後、単純にデータをバックアップし、ランダムなモックを移入するために、そのランダマイズメソッドを呼び出します。すべてのクラス全体で共有することができます。また、制約やこれらの特殊な方法に基づいて、ランダムなデータ列や数字を生成するために、特殊なメソッドを追加することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top