C# 使用VisualStudio2019社区模拟Linq扩展方法是不可能的吗?

C# 使用VisualStudio2019社区模拟Linq扩展方法是不可能的吗?,c#,linq,unit-testing,moq,extension-methods,C#,Linq,Unit Testing,Moq,Extension Methods,我正在尝试使用XUnit和Moq对一些.NET 5代码进行单元测试,如下所示: try { if (this.weatherDbContext.Observations.Any()) { return (DateTime)this.weatherDbContext.Observations.OrderByDescending(observation => observation.ObservationTime).FirstOrDefault().Observ

我正在尝试使用XUnit和Moq对一些.NET 5代码进行单元测试,如下所示:

try
{
    if (this.weatherDbContext.Observations.Any())
    {
        return (DateTime)this.weatherDbContext.Observations.OrderByDescending(observation => observation.ObservationTime).FirstOrDefault().ObservationTime;
    }
    else
    {
        return null;
    }

}
catch (Exception)
{
    do some error handling...
}
我希望能够模拟数据库访问失败,比如超时,以便测试错误处理代码。(请注意,这里使用的是Entity Framework Core 5,我选择不在存储库中使用EF。这是一个备受争议的问题,我就是这样做的。)

我知道我不能模仿Linq方法
.Any()
.orderedbydysending()
等,因为它们是扩展方法。我在StackExchange上找到了解决方法,但它们仅适用于您自己编写的扩展方法,而不是Microsoft生产的扩展方法。我尝试了很多NuGet“helper”包,但它们都与扩展方法问题相冲突。我知道微软的假货,但这似乎只在付费版本的VisualStudio中可用


因此,我假设使用Visual Studio社区测试Linq扩展方法的失败是不可能的,对吗?

因为这是您无法控制的所有代码,所以您的假设对于这个特定场景是准确的。没有搜索MS的源代码来找到一个可以满足您的测试用例的执行路径。您的代码中的EF是您无法控制的第三方依赖项,因此应将其视为第三方依赖项。您是否知道用于单元测试的针对efcore5的inmemory db?当您的数据集没有ObservationTime时,这将引发异常。@Nkosi同意我无法控制该代码。我试图测试的是该代码引发异常的后果