Как протестировать метод обновления сущности в API

я тестирую свой API, написал интеграционный тест для обновления.

[Fact]
public async Task Returns_Success()
{
    //arrange
    var dbset = _dbContext.Set<Category>();
    dbset.RemoveRange(dbset);
    await _dbContext.SaveChangesAsync();

    var category = new Faker<Category>()
        .RuleFor(x => x.Name, f => f.Random.String2(1, 10))
        .RuleFor(x => x.Priority, CategoryPriority.Low)
        .Generate();
    
    _dbContext.Set<Category>().Add(category);
    await _dbContext.SaveChangesAsync();

    var request = new Faker<CategoryUpdateRequest>()
        .RuleFor(x => x.Id, category.Id)
        .RuleFor(x => x.Name, f => f.Random.String2(1, 10))
        .RuleFor(x => x.Priority, CategoryPriority.High)
        .Generate();

    //act
    var response = await _categoryClient.UpdateAsync(request);

    //assert
    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

    var updatedCategory = await _dbContext.Set<Category>().SingleOrDefaultAsync(c => c.Id == category.Id);
    
    updatedCategory.Should().BeEquivalentTo(request);
}

Я добавляю сначала объект, дальше вызываю метод API, затем получаю запись по Id, при этом я не вижу изменений, которые должны были быть внесены в методе API. С чем это может быть связано?

При том, что когда я отправляю запрос через swagger или postman всё обновляется. При отладке теста все изменения также в базе присутствуют, но в БД контексте запись остаётся не отредактированный


Ответы (1 шт):

Автор решения: Дмитрий

Я решил свою проблему следующим образом:

await 
   _dbContext.Entry(category).ReloadAsync();

Метод ReloadAsync() позволяет перезагрузить объект из базы данных, перезаписывая значение атрибутов.

Возможно, это можно было решить по другому, буду рад выслушать предложения.

→ Ссылка