5

いくつかの循環参照を持つかなりネストされたモデルに取り組んでいます。また、Entity Framework を使用しているため、すべてのリストはICollection<T>. これに対応するために、次のように AutoFixture を構成しています。

_fixture = new Fixture().Customize(new MultipleCustomization());
_fixture.Behaviors.Remove(new ThrowingRecursionBehavior());
_fixture.Behaviors.Add(new OmitOnRecursionBehavior());

型を作ろうとすると

_fixture.CreateAnonymous<Session>();

AutoFixture に問題があり、次のエラーがスローされます

System.InvalidCastException : タイプ 'Ploeh.AutoFixture.Kernel.OmitSpecimen' のオブジェクトをタイプ 'The.Model.Language' にキャストできません

Sessiontype内のコレクションを除外するとLanguage、AutoFixture はグラフ内の別の型に対して同じ例外をスローします。

エラーの原因となったプロパティなど、AutoFixture からさらに情報を抽出する方法はありますか?

AutoFixture が私のタイプを OmitSpecimen にキャストしようとするのはなぜですか? また、このプロセスで何がキャストされないようにする可能性がありますか?

ここにスタック トレースの要旨を作成しました。

アップデート

問題を再現することができました。このオブジェクトのペアが与えられた場合

public class Session
{
    public Language Language { get; set; }
}

public class Language
{
    public ICollection<Session> Sessions { get; set; }
}

への呼び出し_fixture.CreateAnonymous<Session>();は、キャスト例外をスローします。

4

1 に答える 1

0

これは、新しいバージョンAutoFixture(たとえば 3.31.3) で機能します。

このコードは実行されます:

    public class Session
    {
        public Language Language { get; set; }
    }

    public class Language
    {
        public ICollection<Session> Sessions { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var fixture = new Fixture();
            fixture.Behaviors.Add(new OmitOnRecursionBehavior());

           var session = fixture.Create<Session>();

            Debug.Assert(session != null, "Session should not be null");
        }
    }
于 2015-08-12T06:53:41.507 に答える