0

IQueryable を返すクエリ メソッドを含む汎用リポジトリがあります。私の呼び出しコードでは、次のようなことができます

_repository.Query<MyClass>(x=>x.EntityId == 1).Fetch(x=>x.MyClassChild).ToList()

ただし、呼び出しコードをテストすることはできません (私の知る限り)。だから私は次のことをしようとしています

public class Repository : IRepository
{
....
    public FetchedResult<TQueried, TRelated> ThenFetch<TQueried, TFetch, TRelated>(INhFetchRequest<TQueried, TFetch> query, Expression<Func<TFetch, TRelated>> relatedObjectSelector)
    {
        INhFetchRequest<TQueried, TRelated> nhFetchRequest = query.ThenFetch(relatedObjectSelector);
        return new FetchedResult<TQueried, TRelated>(this, nhFetchRequest);
    }

    public FetchedResult<TOriginating, TRelated> Fetch<TOriginating, TRelated>(IQueryable<TOriginating> query, Expression<Func<TOriginating, TRelated>> relatedObjectSelector)
    {
        INhFetchRequest<TOriginating, TRelated> nhFetchRequest = query.Fetch(relatedObjectSelector);
        return new FetchedResult<TOriginating, TRelated>(this, nhFetchRequest);
    }
}

--

public class FetchedResult<TQueried, TRelated>
{
    private readonly IRepository _repository;
    private readonly INhFetchRequest<TQueried, TRelated> _query;

    public FetchedResult(IRepository repository, INhFetchRequest<TQueried, TRelated> query)
    {
        _repository = repository;
        _query = query;
    }

    public FetchedResult<TQueried, TRelated> ThenFetch<TFetch>(Expression<Func<TFetch,TRelated>> relatedObjectSelector)
    {
        return _repository.ThenFetch(_query, relatedObjectSelector);
    }
}

したがって、Fetch への最初の呼び出しは機能しますが、repositor.ThenFetch への呼び出しは INhFetchRequest クエリを受け取りますが、INhFetchRequest を返します。そのため、FetchedResult を使用して ThenFetch をもう一度呼び出すことはできません。

これが問題だと思います。この時点で私の脳はかなり分解されています。誰かが私に知らせるのを助けることができれば、私はより多くの、またはより良い情報を提供しようとすることができます.

これで、静的を使用してそれを実行できることがわかりましたが、ここでの私の目標は、Fetch の呼び出しをモックできるようにすることです。

ありがとう、

ライフ

4

1 に答える 1