6

(これを行う方法が見つかりませんでした。ソースコードからはサポートされていないようですが、見落としている可能性があります)

私は次のようなことをしたいと思います:

(new Fixture())
    .CreateAnonymous<Circle>(
        new CircleSpecification { MinRadius = 1, MaxRadius = 5 }
    );

したがって、これはAutoFixtureにすでに存在する同様のシードイディオムのバリエーションですが、シードイディオムは非常にハードコーディングされています(またはそう思います)。

Quiestion:標本の引数を受け入れるようにフィクスチャをカスタマイズすることは可能ですか?

私がこれまでに持っている最善のアイデアは、結果オブジェクトを含む特別な仕様クラスを作成することです。これにより、次のことができるようになります。

public class CircleSpecification {
    public double MinRadius { get; set; }
    public double MaxRadius { get; set; }

    public Circle Circle { get; set; }
}

使用できる登録CircleSpecificationSpecimenBuilderできるように:

Circle circle = Fixture.CreateAnonymous<CircleSpecification>(
    new CircleSpecification { MinRadius = 0.0, MaxRadius = 5.0 }).Circle;

シードオーバーロードでCreateAnonymousを使用するには、シード引数タイプがメソッドの戻りタイプと一致する必要があることに注意してください。

4

1 に答える 1

5

の匿名インスタンスの作成中に値を割り当てたい場合は、次のメソッドCircleを使用できます。Build

var fixture = new Fixture();
var c = fixture
    .Build<Circle>()
    .With(x => x.Radius, 3)
    .CreateAnonymous();

ただし、Radiusプロパティに特別なことが何もない場合は、後で単純に値を割り当ててみませんか?

var fixture = new Fixture();
var c = fixture.CreateAnonymous<Circle>();
c.Radius = 3;

後者のオプションはより宣言的であり、AutoFixture の xUnit.net 統合を使用して、偶発的な複雑さをすべて取り除く、より簡潔なテストを作成できます。

[Theory, AutoData]
public void Test3(Circle c)
{
    c.Radius = 3;

    // Act and assert here
}
于 2013-01-30T06:53:18.220 に答える