测试期间ObjectDisposedException

时间:2017-10-24 17:48:18

标签: aspnetboilerplate

阅读编辑

我有一个与过滤查询相关的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会很烦人。这似乎也是我做错了什么

修改

我已经解决了这个问题。我必须在运行测试时使用我的应用程序服务的接口,以便能够正确地模拟它

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。我必须在运行测试时使用我的应用程序服务的接口,以便能够正确地模拟它