C# 使用Moq测试,一行使用异步可查询扩展和项目,如何测试

C# 使用Moq测试,一行使用异步可查询扩展和项目,如何测试,c#,unit-testing,moq,automapper,C#,Unit Testing,Moq,Automapper,我有这个方法(部分方法) 这样就可以使用async扩展方法,比如FirstOrDefaultAsync()。但出于某种原因,即使在我为它指定了映射之后(最初引发错误的原因),但现在它在尝试查询DbSet时引发了空引用异常 我只想绕过这一部分,这样我就可以开始测试我的代码的工作 因此,我的行动是: Exception exception; try { this.userService.GetUsers(Guid.NewGuid()); } catch(Exception ex) {

我有这个方法(部分方法)

这样就可以使用
async
扩展方法,比如
FirstOrDefaultAsync()
。但出于某种原因,即使在我为它指定了映射之后(最初引发错误的原因),但现在它在尝试查询
DbSet
时引发了空引用异常

我只想绕过这一部分,这样我就可以开始测试我的代码的工作

因此,我的行动是:

Exception exception;

try
{
    this.userService.GetUsers(Guid.NewGuid());
}
catch(Exception ex)
{
    exception = ex;
}
我的主张:

Assert.IsNotNull(exception);
Assert.AreEqual(exception.Message, "there are no users");

那么,你如何才能让这一切都很好地发挥,防止我陷入我的行为

不要编写此测试,它不提供任何值。您仍然需要编写一个集成测试,该测试与控制器和数据源的内部实现耦合得太多

如果有的话,您应该创建一个支持对象集合的内存中DbSet存根实现。但是,由于这实际上并没有影响到生产LINQ提供程序,所以您仍然需要编写集成测试,否定此测试将具有的任何值

简言之,不要试图做你在这里做的事情,这不值得任何积极的收获,并且会导致对这些测试的错误价值感。

事实证明

var data = new List<User>
    {
        It.IsAny<User>(),
        It.IsAny<User>(),
        It.IsAny<User>(),
        It.IsAny<User>()
    };
var数据=新列表
{
It.IsAny(),
It.IsAny(),
It.IsAny(),
It.IsAny()
};

使查询上的my
.Project()
返回空引用异常。只需使用
new User()
即可轻松解决这一问题。

我不是要测试那一段代码,我实际上只是想绕过它,这样我就可以测试我编写的代码,很明显,我对项目是否有效没有任何疑问。我只希望它返回一个映射用户DTO的列表,这样我就可以测试我的方法的其余部分。。。如果这有道理的话。我将更新我的问题。是否有方法添加对.Project()的支持。到()?转换由AutoMapper负责。如果代码中有Project().To(),则此操作将失败。System.NotSupportedException:此函数只能从LINQ调用到实体。我不确定您的问题是什么,可能值得创建一个关于itI的新问题。我怀疑您有相同的错误。您的代码没有到达if(users==null),因为错误发生在上述代码的.Project().to()中。var users=await context.users.Where(u=>u.AccountId.Equals(AccountId)).Project().To().toListSync();你的异步IQueryable被模拟出来了吗?
Assert.IsNotNull(exception);
Assert.AreEqual(exception.Message, "there are no users");
var data = new List<User>
    {
        It.IsAny<User>(),
        It.IsAny<User>(),
        It.IsAny<User>(),
        It.IsAny<User>()
    };