如何正确测试 EntityFramework、存储库模式和复杂对象的业务逻辑?

How to properly test EntityFramework, Repository pattern and Business logic w/ complex objects?

我有一个设计有点复杂的数据库,因此问题也很复杂。

我通过 Entity Framework 与这个数据库通信。我的代码库如下所示:

  1. 数据层:Entity Framework、DbContext、数据模型。
  2. 存储库层:模型的基本 CRUD 操作提供程序。
  3. 逻辑层:业务逻辑。
  4. Web API 层:与服务通信的控制器。
  5. 测试层:做业务逻辑单元测试。

我正在编写单元测试,但我不知道如何正确编写它们,或者我的业务逻辑层是否很糟糕...在大学里,他们认为我应该这样做,但我想我可能误解了这种模式背后的原理...

在我的业务逻辑方法中,我将域对象作为参数传递,然后使用 LINQ 'query' 数据库来查找所需的结果。每个方法都使用 'queries' 作为逻辑。所以它在很大程度上取决于查询。 例如,我需要确定 2 个用户是否相互匹配(就像在 Tinder 中一样)

public bool AreTheyMatched(Profile requestor, Profile requested)
        {
            var areTheyMatched = ChatRepository.GetAll().Where(x =>
                   x.Profiles.Contains(requestor) &&
                   x.Profiles.Contains(requested) &&
                   x.SYS_ChatType.Type.ToLower() == "match" &&
                   x.Profiles.Count() == 2).Count() == 1;
            return areTheyMatched;

这里的最佳做法是什么?

我在插入数据库时​​进行了验证简单对象的单元测试。这对我来说很简单。但是这个题目的复杂度似乎超出了我目前的理解范围。

创建一个包含适合您当前测试用例的嵌套配置文件的聊天对象列表。例如,一个列表实际上包含两个配置文件的匹配项。然后将存储库模拟到 return 此列表并断言已找到匹配项。对于另一个测试用例,设置聊天列表没有匹配项,并断言未找到匹配项。