Единый тест с реальной базой данных в схеме хранилища?C#

Место общения программистов C#
Anonymous
Единый тест с реальной базой данных в схеме хранилища?

Сообщение Anonymous »

У меня есть основной веб -API и сервисы ASP.net. Чтобы абстрагировать dbcontext от уровня сервиса, я решил использовать шаблон хранилища. тест? Я использую шаблон хранилища неправильного, так как я не могу контролировать его с помощью макета или базы данных в памяти?public class UrlRepository(AppDbContext dbContext, IMemoryCache memoryCache) : IUrlRepository
{
private readonly AppDbContext _dbContext = dbContext;
private readonly IMemoryCache _memoryCache = memoryCache;

public virtual async Task DeleteUrlAsync(Guid urlId)
{
int rows = await _dbContext.Urls
.Where(u => u.Id == urlId)
.ExecuteDeleteAsync(); // Cannot mock it and cannot use InMemory provider since exception will be thrown (See here https://stackoverflow.com/a/74907535/23143871).

if (rows > 0)
{
_memoryCache.Remove($"{CacheKeys.UrlId}-{urlId}");
}

return rows;
}

public virtual async Task GetAllUrlDtoAsync(int pageNumber, int pageSize)
{
var query = _dbContext.Urls.AsNoTracking(); // Cannot mock it since it is an extension method

var totalCount = await query.CountAsync();
var totalPages = (int)Math.Ceiling((double)totalCount / pageSize);

var urls = await query
.Skip((pageNumber - 1) * pageSize) // Cannot mock it since it is an extension method
.Take(pageSize)
.Select(UrlEntityProjection.UrlDto)
.ToListAsync();

return urls.ToPagination(u => u, totalCount, totalPages, pageNumber, pageSize);
}
}

Как видите, репозиторий содержит код, который не может быть высмечен или используется с поставщиком в памяти. Но должен ли я использовать его, чтобы проверить этот класс? На данный момент я придумал решение для использования: < /p>
SQLite database -> apply pending migrations -> delete database at the end of the test


Подробнее здесь: https://stackoverflow.com/questions/794 ... ry-pattern

Вернуться в «C#»