XUnit の理論と組み合わせた AutoFixture のパワーを本当に高く評価しています。私は最近、カスタマイズをカプセル化し、属性を介してテストに提供する方法を採用しました。
場合によっては、テストを実行するための 1 回限りのシナリオが必要になります。上記のように AutoDomainDataAttribute を使用する場合、IFixture を要求して、属性によって作成された同じインスタンスを取得することを期待できますか?
私のシナリオでは、コレクションなどにデフォルトで MultipleCustomization を使用しています。ただし、この 1 つのケースでは、SUT のコンストラクターに送信されるアイテムは 1 つだけです。したがって、テストメソッドを次のように定義しました。
[Theory, AutoDomainData]
public void SomeTest(IFixture fixture) {
fixture.RepeatCount = 1;
var sut = fixture.CreateAnonymous<Product>();
...
}
残念ながら、匿名の製品を作成するときに例外が発生します。これらの属性を持つメソッド パラメーターとして Product を要求すると、他のテストは正常に機能します。これは、フィクスチャ パラメータが AutoDomainDataAttribute によって作成されたものと同じであることを望んでいる、この特定のケースだけの問題です。
製品のコンストラクターは、AutoDomainData を介してインプレースで行ったカスタマイズにより、通常は 3 つの項目が入力される IEnumerable を想定しています。現在、私の DomainCustomization は、MultipleCustomization と AutMoqCustomization をこの順序で構成する CompositeCustomization です。
例外は、「InvalidCastException: タイプ 'Castle.Proxies.ObjectProxy' のオブジェクトをタイプ 'Product' にキャストできません。」です。