使用 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)
}
而且效果非常好!
我一直在尝试模拟一个包含可选参数和固定参数的函数,但每次我都得到一个空值 这是我在接口中定义的函数,我想模拟它:
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)
}
而且效果非常好!