8

AutoFixtureを SutFactory として使用すると、型の値を登録または凍結すると、その型の後続のすべての使用にその値が使用されることがわかります。ただし、次のようなコンストラクターで同じ型の 2 つのパラメーターを持つクラスがある場合:

public class ClassA
{
    public double ParameterA { get; private set;}
    public double ParameterB { get; private set;}

    public ClassA(double parameterA, double parameterB)
    {
       ParameterA = parameterA;
       ParameterB = parameterB;
    }

    public void Execute(ClassB object)
    {
        object.Value = (object.Value * ParameterA) /ParameterB;
    }
}

計算された値をテストする目的で、autofixture を使用して parameterA と parameterB に一意の事前定義された値を挿入するための戦略は何ですか?

*残念ながら、ここで正確なシナリオを共有することはできませんが、コマンド パターンを使用して別のオブジェクトを操作するため、parameterA と parameterB を設定して設計を維持する唯一の方法は、両方を挿入することであり、コンストラクターが最も適切な方法です。この場合はこれを行います。

4

3 に答える 3

2

機能をもう少し使ってみたところ、個人的には、これが発生するオブジェクトはそれほど多くないことがわかったので、クラスの単純なカスタマイズを作成するのがおそらくここで最適です。たとえば、次のようになります。

public class ClassACustomization: ICustomization
{
    public double ParameterA { get; set;}
    public double ParameterB { get; set;}

    public void Customize(IFixture fixture)
    {
         //Note: these can be initialized how you like, shown here simply for convenience.
         ParameterA = fixture.Create<double>();
         ParameterB = fixture.Create<double>();
         fixture.Customize<ClassA>(c => c
           .FromFactory(() => 
           new ClassA(ParameterA , ParameterB )));
    }
}

これにより、ParameterAまたはParameterBの特定のインスタンスに注入する機能を損なうことなく、AutoFixtureの優れた柔軟性が得られることがわかりました(ビルダーメソッド、コンストラクターなどを使用して設定できます...ランダム値)。

于 2013-08-13T17:29:57.437 に答える