0

我正在测试一个递归函数,该函数用于根据数据库中的数据构建树。出于这个问题的目的,只需假设实体有自己的实体 id,然后是其父实体的 id。

在递归函数的每次调用期间,它都会针对存储库运行:

 List<MyEntity> children = dsService.GetMany<MyEntity>(x => x.ParentId == currentId)

通常,我只是模拟存储库并设置如下内容:

dsService.GetMany<MyEntity>(x => x.ParentId == 1).Returns(new List<MyEntity> { });
dsService.GetMany<MyEntity>(x => x.ParentId == 2).Returns(new List<MyEntity> { myentity, myotherentity});

但是,NSubstitute(基于快速谷歌搜索,其他模拟框架,但我承认我不是超级彻底)在 LINQ 查询方面存在问题,除非查询完全相同,否则我无法使用它来确定返回什么(相同的变量名、相同的顺序等)。我还看到我可以将第一个函数调用设置为 GetMany(不管参数如何)返回一个东西,第二个返回另一个,等等。

我不太喜欢这两种方法,因为第一种方法假设函数调用/树遍历将始终以完全相同的顺序进行(实际上,当我正在阅读本文时,因为它处于循环中,它会每次都使用 currentId 作为变量名,这样就行不通了,因为无法区分调用),第二个假设变量的顺序,变量的名称等将保持完全相同. 在这些情况下,重构可以/将破坏单元测试。

那么这里最好的方法是什么?有没有可以处理这样的 lambdas 的模拟框架?我最好的方法是创建一个包含列表的假存储库,以便单元测试查询并返回相关结果?完全不同的东西?

4

0 回答 0