3

AutoFixture ベースのテストでは、次のことをできるだけ明確に表現しようとしています。

<input>このメソッドのパラメーターに渡すとx、他のパラメーターを匿名で入力すると、結果は...

ファクトリメソッドの例を挙げる:-

class X
{
    public static X Create( Guid a, Guid b, Guid c, String x, String y);

私は簡潔な一連のテストとして表現しようとしています:

  1. に null を渡すとx、スローされるはずです
  2. に null を渡すとy、スローされるはずです

表現するために、私は言うことができます:

var fixture = Fixture();
var sut = default( Func<Guid, Guid, Guid,string,X>);
sut = fixture.Get( ( Guid anonA, Guid anonB, Guid anonC, string anonY ) => 
    x =>
        X.Create( anonA, anonB, anonC, x, anonY ) );

Assert.Throws<ArgumentNullException>( () => sut( null));

わずかに異なる 2 番目のインスタンスでは、次のことを行う必要があります。

var fixture = Fixture();
var sut = default( Func<Guid, Guid, Guid,string,X> );
sut = fixture.Get( ( Guid anonA, Guid anonB, Guid anonC, string anonX ) => 
    y =>
        X.Create( anonA, anonB, anonC, anonX, y ) );
Assert.Throws<ArgumentNullException>( () => sut( null));

プロパティについてWithは、AutoFixture にあります。メソッド (および/または ctor) の引数に相当するものはありますか?

PS 0.この場合、「魔法の」文字列に入る必要があるかどうかは気にしません-つまり、xビットを"x".

PS 1. 部屋のもう 1 つの象は、AutoFixture の 4 倍の過負荷に頭をぶつけていることGetです。それとも、この環境に古いバージョンがあるためですか?

PS 2.これをモデル化する方法に関するより良い提案にもオープンです-プロパティやフィールドではなくメソッド呼び出しにしたいという事実に対処している限り(そして、AutoFixtureスタイルで動作させたいのですが) )。

4

1 に答える 1

3

これを簡単にする AutoFixture の機能は実際にはありませんが、提案は受け付けています。ただし、強く型付けされた方法でそのようなものを表現する方法がわかりません。構文はどのようになりますか?

ただし、Null Guard が機能することをテストするためだけにこれが必要な場合は、そのために AutoFixture.Idioms を使用できます。

これが例です。

var fixture = new Fixture();
var assertion = new GuardClauseAssertion(fixture);
var method = typeof(GuardedMethodHost).GetMethod("ConsumeStringAndInt32AndGuid");
assertion.Verify(method);

のソース コードPloeh.AutoFixture.IdiomsUnitTest.Scenarioを見ると、他の例が見つかりますが、AutoFixture の文書化が不十分な領域の 1 つであることは認めます...

もう 1 つの完全な点は、パラメータが少ない (またはない) メソッドの方が、パラメータが多いメソッドよりも優れているということです。パラメータ オブジェクトの導入を検討しましたか?

于 2012-07-12T15:45:16.423 に答える