は、次のクラスを考えてみましょう:はAutoFixture
public interface IInterface {}
public class Class : IInterface {}
public class Customization : ICustomization
{
readonly IInterface item;
public Customization() : this(new Class()) {}
public Customization(IInterface item)
{
this.item = item;
}
public void Customize(IFixture fixture)
{
fixture.Inject(item);
var created = fixture.Create<Class>(); // Would like this to resolve as item from previous line.
}
}
私はに実行している問題はClass
ではないのに対しIInterface
が、注入されていることです。両方とも同じインスタンスが返されるようにIInterface
とClass
の両方を注入する方法はありますか?
私はテストメソッドの属性とICustomization
(またはICustomization
内)を使用して、これを実行したいとしないことに注意してください。私はこれらの2つのクラスでカスタマイズされたインジェクションを行うつもりです。 [Frozen(Matching.ImplementedInterfaces)]Class item
をパラメータとして使用すると、凍結されたクラスがICustomization.Customize
メソッドの注入された値を上書きするため、機能しません。
は、さらに、これはサンプルコードがあると私はそれを使用していないかということに注意してください。 xUnitの試験方法では、私は上記の凍結IInstance
するパラメータとして指定されているClass
インスタンスたい:
public void MyTest(IInterface @interface, Class implementation)
{
Assert.Same(@interface, implementation);
}
「フリーズ」オーバーロードは、あなたが思うようには行いません。 [ドキュメント](https://github.com/AutoFixture/AutoFixture/blob/master/Src/AutoFixture/FixtureFreezer.cs#L43-L72)を参照してください。望ましい結果を達成するためのかなり慣れ親しんだ方法の1つについてはEnrico Campidoglioの答えを参照してください。もう一つの選択肢は、AutoFixture auto-mockingコンテナ拡張の1つを使用することです。基本的には、このような機能が組み込まれています。 –
謝罪@マークセーマン、私は失敗です。私はInject/Freezeに関する他の議論を見て、混乱しました。私はインジェクションとフリーズを意味せず、それに応じて質問を更新しました。 –