使用 C# 中的 Nsubstitute 模拟具有可选参数和固定参数的函数 returns null

Mocking a function with optional parameter with fixed parameter using Nsubstitute in C# returns null

我一直在尝试模拟一个包含可选参数和固定参数的函数,但每次我都得到一个空值 这是我在接口中定义的函数,我想模拟它:

List<object> GetEntitiesByIDs(List<long> ids, bool includeStatuses = false, bool includeRounds = false, bool includeSample = false);

调用此函数的方法:

        public object ExportSpecimens(List<long> ids)
        {
            var specimens = Repo.GetEntitiesByIDs(ids, includeSample: true);
        }

这是我的测试方法:

        public void ExportSpecimens_ValidData_Success()
        {
             var _repo = Substitute.For<IRepo>();
            _repo.GetEntitiesByIDs(Arg.Any<List<long>>(), includeSample: Arg.Any<bool>()).Returns(_specimens);

        }

每当我点击 ExportSpecimens 中的函数时,我都会得到 null 值。 我还尝试在测试和主要功能中包含所有参数,但它没有用。 但是我在 ExportSpecimens 中第一次点击函数 GetEntitiesByIDs 后注意到一些歧义我得到 null 值然后我通过向上滚动调试器点或立即windows再次点击它,我得到了正确的输入。

我无法理解如何毫无问题地模拟此功能?

我找不到任何可以让我更好地理解我的问题的解决方案的内容。但是,现在,为了推进我的工作,我找到了一个变通方法,我创建了一个具有固定参数的重载函数,我可以成功模拟它。

例如:

我想模拟这个函数:

List<object> GetEntitiesByIDs(List<long> ids, bool includeStatuses = false, bool includeRounds = false, bool includeSample = false);

我没有直接模拟它,而是创建了另一个调用此主函数的函数:

List<object> GetEntitiesByIDs(bool includeSample, List<long> ids){
   GetEntitiesByIDs(ids, includeSample: includeSample)
}

而且效果非常好!