Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Moq C#MongoDB FindAsync返回值_C#_Mongodb_Moq_Xunit.net - Fatal编程技术网

Moq C#MongoDB FindAsync返回值

Moq C#MongoDB FindAsync返回值,c#,mongodb,moq,xunit.net,C#,Mongodb,Moq,Xunit.net,最近,我们为Mongo实现了一个通用版本的存储库 存储库 public async Task<IList<T>> FindAsync<T>(FilterDefinition<T> t) where T : IMongoModel { var collection = _connection.GetCollection<T>(); var result = await collection.FindAsync<T&g

最近,我们为Mongo实现了一个通用版本的存储库

存储库

public async Task<IList<T>> FindAsync<T>(FilterDefinition<T> t) where T : IMongoModel
{
    var collection = _connection.GetCollection<T>();
    var result = await collection.FindAsync<T>(t);
    return await result.ToListAsync();
}

public async Task<IList<T>> FindAsync<T>(Expression<Func<T, bool>> filter) where T : IMongoModel
{
    var collection = _connection.GetCollection<T>();
    var result = await collection.FindAsync(filter);
    return await result.ToListAsync();
}
公共异步任务FindAsync(FilterDefinition t),其中t:IMongoModel
{
var collection=_connection.GetCollection();
var result=await collection.FindAsync(t);
返回等待结果。toListSync();
}
公共异步任务FindAsync(表达式筛选器),其中T:IMongoModel
{
var collection=_connection.GetCollection();
var result=await collection.FindAsync(过滤器);
返回等待结果。toListSync();
}
正在调用的代码

private async Task<MongoDb.Advertisement.Service.Models.AdvertisementFiles.Advertisement> DealerZipCodeAndLocation(MongoDb.Advertisement.Service.Models.AdvertisementFiles.Advertisement advertisement, string searchPhone)
{
    var matchingDealers = await _mongoRepository.FindAsync(Builders<Dealer>.Filter.ElemMatch(y => y.Phones, z => z.PhoneNumber == searchPhone));
    if (!matchingDealers.Any())
    {
        return advertisement;
    }
    if (matchingDealers.Count > 1)
    {
        _logger.Warning("More than one dealer found with {PhoneNumber}", searchPhone);
    }
    var matchingDealer = matchingDealers.FirstOrDefault();
    if (matchingDealer.Geocode == null)
    {
        var geoCode = await _geoLocationCache.GetGeocodByZipCode(matchingDealer.Address.ZipCode);

        if (geoCode.status != "OK")
        {
            return advertisement;
        }
        advertisement.Geocode = geoCode;
        advertisement.ZipCode = matchingDealer.Address.ZipCode;
        await UpdateGeocode<Dealer>(matchingDealer.Id, geoCode);
    }

    return advertisement;
}
public IList<Dealer> GetDealerWithZipCode()
{
    return new List<Dealer>
    {
        new Dealer
        {
            Active = true,
            DealerName = "City Chevrolet",
            Phones = new List<Phone>
            {
                new Phone
                {
                    PhoneNumber = "4033809999"
                }
            },
            MasterCode = "CHEV01",
            RevisionDate = DateTime.UtcNow
        }
    };
}

public async Task<IList<Dealer>> GetDealerWithZipCode()
{
    return await Task.Run(() => new List<Dealer>
    {
        new Dealer
        {
            Active = true,
            DealerName = "City Chevrolet",
            Phones = new List<Phone>
            {
                new Phone
                {
                    PhoneNumber = "4033809999"
                }
            },
            MasterCode = "CHEV01",
            RevisionDate = DateTime.UtcNow
        }
    });
}
private async Task DealerZipCodeAndLocation(MongoDb.advision.Service.Models.advisementfiles.advision advision,string searchPhone)
{
var matchingderals=wait _mongoRepository.FindAsync(Builders.Filter.ElemMatch(y=>y.Phones,z=>z.PhoneNumber==searchPhone));
如果(!matchingDealers.Any())
{
退货广告;
}
如果(匹配经销商数>1)
{
_logger.Warning(“找到多个具有{PhoneNumber}的经销商”,searchPhone);
}
var matchingDealer=matchingDealers.FirstOrDefault();
if(matchingDealer.Geocode==null)
{
var geoCode=await_geoLocationCache.GetGeocodByZipCode(matchingDealer.Address.ZipCode);
如果(geoCode.status!=“正常”)
{
退货广告;
}
广告。地理编码=地理编码;
advision.ZipCode=matchingDealer.Address.ZipCode;
等待更新代码(matchingDealer.Id,地理代码);
}
退货广告;
}
还尝试了以下签名

var matchingDealers = await _mongoRepository.FindAsync<Dealer>(x => x.Phones.Any(y => y.PhoneNumber == searchPhone));
var matchingDealers = await _mongoRepository.FindAsync(filter);
var matchingderals=wait _mongoRepository.FindAsync(x=>x.Phones.Any(y=>y.PhoneNumber==searchPhone));
var matchingDealers=Wait _mongoRepository.FindAsync(过滤器);
当模拟FindAsync调用时,我在返回时遇到了困难。问题要么是签名不匹配,要么更可能是异步

最小起订量设置 我已经尝试了这两个版本(也用
It.IsAny()
代替电话号码)

\u testFixture.MongoRepository.Setup(x=>x.FindAsync(Builders.Filter.ElemMatch(y=>y.Phones,z=>z.PhoneNumber==\u testFixture.GetAdvertisementWithNoZipCode().OriginalPhoneNumber))。返回(Task.FromResult(\u testFixture.getDealWithzipcode());
_testFixture.MongoRepository.Setup(x=>x.FindAsync(Builders.Filter.ElemMatch(y=>y.Phones,z=>z.PhoneNumber==_testFixture.GetAdvertisementWithNoZipCode().OriginalPhoneNumber)).ReturnsAsync(_testFixture.getDealWithzipcode());
返回已尝试的对象

private async Task<MongoDb.Advertisement.Service.Models.AdvertisementFiles.Advertisement> DealerZipCodeAndLocation(MongoDb.Advertisement.Service.Models.AdvertisementFiles.Advertisement advertisement, string searchPhone)
{
    var matchingDealers = await _mongoRepository.FindAsync(Builders<Dealer>.Filter.ElemMatch(y => y.Phones, z => z.PhoneNumber == searchPhone));
    if (!matchingDealers.Any())
    {
        return advertisement;
    }
    if (matchingDealers.Count > 1)
    {
        _logger.Warning("More than one dealer found with {PhoneNumber}", searchPhone);
    }
    var matchingDealer = matchingDealers.FirstOrDefault();
    if (matchingDealer.Geocode == null)
    {
        var geoCode = await _geoLocationCache.GetGeocodByZipCode(matchingDealer.Address.ZipCode);

        if (geoCode.status != "OK")
        {
            return advertisement;
        }
        advertisement.Geocode = geoCode;
        advertisement.ZipCode = matchingDealer.Address.ZipCode;
        await UpdateGeocode<Dealer>(matchingDealer.Id, geoCode);
    }

    return advertisement;
}
public IList<Dealer> GetDealerWithZipCode()
{
    return new List<Dealer>
    {
        new Dealer
        {
            Active = true,
            DealerName = "City Chevrolet",
            Phones = new List<Phone>
            {
                new Phone
                {
                    PhoneNumber = "4033809999"
                }
            },
            MasterCode = "CHEV01",
            RevisionDate = DateTime.UtcNow
        }
    };
}

public async Task<IList<Dealer>> GetDealerWithZipCode()
{
    return await Task.Run(() => new List<Dealer>
    {
        new Dealer
        {
            Active = true,
            DealerName = "City Chevrolet",
            Phones = new List<Phone>
            {
                new Phone
                {
                    PhoneNumber = "4033809999"
                }
            },
            MasterCode = "CHEV01",
            RevisionDate = DateTime.UtcNow
        }
    });
}
public IList GetDealerWithZipCode()
{
返回新列表
{
新经销商
{
活动=真,
DealerName=“城市雪佛兰”,
电话=新列表
{
新电话
{
电话号码=“4033809999”
}
},
MasterCode=“CHEV01”,
修订日期=DateTime.UtcNow
}
};
}
公共异步任务getDealWithZipCode()
{
返回等待任务。运行(()=>新建列表
{
新经销商
{
活动=真,
DealerName=“城市雪佛兰”,
电话=新列表
{
新电话
{
电话号码=“4033809999”
}
},
MasterCode=“CHEV01”,
修订日期=DateTime.UtcNow
}
});
}
例外情况

System.ArgumentNullException: Value cannot be null.
Parameter name: source
     at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source)
     at Domain.Advertisement.Service.BackgroundProcessors.ZipCodeAndLocationProcessor.<DealerZipCodeAndLocation>d__5.MoveNext() in C:\Repos\Vader\AdSvc\domain\domain.advertisement.service\BackgroundProcessors\ZipCodeAndLocationProcessor.cs:line 60
 --- End of stack trace from previous location where exception was thrown ---
     at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
     at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
     at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
     at Domain.Advertisement.Service.BackgroundProcessors.ZipCodeAndLocationProcessor.<ProcessVehicleAdvertisementLocation>d__4.MoveNext() in C:\Repos\Vader\AdSvc\domain\domain.advertisement.service\BackgroundProcessors\ZipCodeAndLocationProcessor.cs:line 42
 --- End of stack trace from previous location where exception was thrown ---
     at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
     at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
     at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
     at Domain.Advertisement.Service.Tests.Processors.ZipCodeAndLocation.ZipCodeAndLocationProcessorFacts.<ProcessVehicleAdvertisementLocation_AdLineHasEmptyZipCodePhoneMatchesDealer_GeocodeIsAddedToAdvertisement>d__3.MoveNext() in C:\Repos\Vader\AdSvc\tests\domain.advertisement.service.tests\Processors\ZipCodeAndLocation\ZipCodeAndLocationProcessorFacts.cs:line 47
 --- End of stack trace from previous location where exception was thrown ---
     at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
     at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
     at Xunit.Sdk.TestInvoker`1.<>c__DisplayClass48_1.<<InvokeTestMethodAsync>b__1>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
     at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
     at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
     at Xunit.Sdk.ExecutionTimer.<AggregateAsync>d__4.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
     at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
     at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
     at Xunit.Sdk.ExceptionAggregator.<RunAsync>d__9.MoveNext()
System.ArgumentNullException:值不能为null。
参数名称:源
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source)
位于C:\Repos\Vader\AdSvc\Domain\Domain.advision.Service.BackgroundProcessors.ZipCodeAndLocationProcessor.d_u5.MoveNext()中的Domain.advision.Service\BackgroundProcessors\ZipCodeAndLocationProcessor.cs:第60行
---来自引发异常的上一个位置的堆栈结束跟踪---
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()中
位于C:\Repos\Vader\AdSvc\Domain\Domain.advision.Service.BackgroundProcessors.ZipCodeAndLocationProcessor.d_u4.MoveNext()中的Domain.advision.Service\BackgroundProcessors\ZipCodeAndLocationProcessor.cs:第42行
---来自引发异常的上一个位置的堆栈结束跟踪---
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()中
位于C:\Repos\Vader\AdSvc\Tests\Domain.advision.Service.Tests\Processors.ZipCodeAndLocation\ZipCodeAndLocationProcessorFacts.d_u3.MoveNext()中的Domain.advision.Service.Tests\Processors\ZipCodeAndLocation\ZipCodeAndLocation\ZipCodeAndLocationProcessorFacts.cs:第47行
---来自引发异常的上一个位置的堆栈结束跟踪---
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Xunit.Sdk.TestInvoker`1.c_uudisplayClass48_1.d.MoveNext()上
---来自引发异常的上一个位置的堆栈结束跟踪---
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Xunit.Sdk.ExecutionTimer.d_u4.MoveNext()中
---来自引发异常的上一个位置的堆栈结束跟踪---
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
Task<IList<T>> FindAsync<T>(FilterDefinition<T> t) where T : IMongoModel
if (matchingDealer.Geocode == null) {
    //...