阅读编辑
我有一个与过滤查询相关的AsyncCrudAppService
类似的实现。当我在AsyncCrudAppServiceBase
派生的Application Services的ABP实现之上运行测试时,一切运行正常。当我在我的自定义"过滤器"之上运行时,我收到以下错误:
System.ObjectDisposedException : Cannot access a disposed object [...]
Object name: 'DataManagerDbContext'.
我知道解决方案正在使用IUnitOfWorkManager
并调用Begin()
方法来定义UnitOfWork
,但由于我正在使用AppServices,我认为已经有UnitOfWork
定义。这些是我的方法:
public PagedResultDto<StateDetails> GetEditorList(EditorRequestDto input)
{
var query = _stateRepository.GetAllIncluding(p => p.Country).AsQueryable();
query = ApplySupervisorFilter(query);
query = query.ApplyFiltering(input, "Name");
var totalCount = query.Count();
query = query.ApplySorting<State, int, PagedAndSortedResultRequestDto>(input);
query = query.ApplyPaging<State, int, PagedAndSortedResultRequestDto>(input);
var entities = query.ToList();
return new PagedResultDto<StateDetails>(totalCount, ObjectMapper.Map<List<StateDetails>>(entities));
}
private IQueryable<State> ApplySupervisorFilter(IQueryable<State> query)
{
if (!SettingManager.GetSettingValue<bool>(AppSettingNames.SupervisorFlag))
{
query = ApplyUncategorizedFilter(query);
}
return query;
}
private IQueryable<State> ApplyUncategorizedFilter(IQueryable<State> query)
{
return query.Where(
p => !p.CountryId.HasValue);
}
我的通过测试(手动UnitOfWork
):
[Fact]
public async Task GetEditorListWithouSupervisorFlag_Test()
{
using (UnitOfWorkManager.Begin())
{
await ChangeSupervisorFlag(false);
var result = _stateAppService.GetEditorList(
new EditorRequestDto
{
MaxResultCount = 10,
});
result.Items.Any(p => p.Country == null).ShouldBe(true);
}
}
有没有人知道这个问题的解决方案&#34;问题&#34;?为我执行的每个测试定义UnitOfWork
会很烦人。这似乎也是我做错了什么
修改
我已经解决了这个问题。我必须在运行测试时使用我的应用程序服务的接口,以便能够正确地模拟它
答案 0 :(得分:0)
我已经解决了这个问题。我必须在运行测试时使用我的应用程序服务的接口,以便能够正确地模拟它