使用Func <>的FindBy方法的Moq存储库设置

Joh*_*ohn 1 c# tdd moq repository

我是新的moq,并一直在努力与以下.

我已经模拟了一个名为_mockedThingsList的List列表

我想Moq我的IRepository的FindBy基于我正在测试的服务中提供的linq查询从这个模拟列表返回.

我目前有什么抛出异常,如下所示.有什么问题吗?

mock.Setup(moq => moq.FindBy(It.IsAny<Func<IThing, bool>>()))
            .Returns((enumThingType tp) => _mockedThingsList.Where(x => x.ThingType == tp));
Run Code Online (Sandbox Code Playgroud)

存储库界面如下所示:

interface IRepository<T>
{
    IEnumerable<T> FindAll();

    IEnumerable<T> FindBy(Func<T, bool> predicate);
    void Add(T item);
    void Remove(T item);

    bool Contains(T item);
    int Count { get; }
}
Run Code Online (Sandbox Code Playgroud)

并且将使用此模拟测试的服务

class ThingService
{
    private readonly IRepository<IThing> _repository;

    public ThingService(IRepository<IThing> repository)
    {
        _repository = repository;
    }


    public List<IThing> GetThings1()
    {
        return _repository.FindBy(y => y.ThingType == enumThingType.WhatEver).ToList();
    }

    public List<IThing> GetThings2()
    {
        return _repository.FindBy(y => y.Name == "What ever").ToList();
    }
}
Run Code Online (Sandbox Code Playgroud)

bca*_*lso 5

我可能会错过一些背景,但在我看来,你是在过度嘲笑.嘲笑清单的目的是什么?您可以轻松返回具体列表并将其用于测试.