Я только начинаю с юнит-тестирования и TDD в целом. Раньше я баловался, но теперь я полон решимости добавить его в свой рабочий процесс и написать лучшее программное обеспечение.
Я задал вопрос вчера, что-то вроде этого, но, похоже, это вопрос сам по себе. Я приступил к реализации класса обслуживания, который буду использовать для абстрагирования бизнес-логики от контроллеров и отображения на конкретные модели и взаимодействия данных с помощью EF6.
Проблема в том, что я уже заблокировал себя, потому что я не хотел абстрагировать EF в репозитории (он все еще будет доступен за пределами сервисов для определенных запросов и т.д.) И хотел бы протестировать мои сервисы (будет использоваться контекст EF).
Здесь, наверное, вопрос, есть ли смысл делать это? Если да, то как люди делают это в дикой природе в свете утечек абстракций, вызванных IQueryable, и многих замечательных постов Ладислава Мрнки на тему модульного тестирования, которые не являются прямыми из-за различий в поставщиках Linq при работе с реализацией в памяти применительно к конкретной базе данных.
Код, который я хочу проверить, кажется довольно простым. (это просто фиктивный код, чтобы попытаться понять, что я делаю, я хочу управлять созданием, используя TDD)
Контекст
public interface IContext
{
    IDbSet<Product> Products { get; set; }
    IDbSet<Category> Categories { get; set; }
    int SaveChanges();
}
public class DataContext : DbContext, IContext
{
    public IDbSet<Product> Products { get; set; }
    public IDbSet<Category> Categories { get; set; }
    public DataContext(string connectionString)
                : base(connectionString)
    {
    }
}
служба
public class ProductService : IProductService
{
    private IContext _context;
    public ProductService(IContext dbContext)
    {
        _context = dbContext;
    }
    public IEnumerable<Product> GetAll()
    {
        var query = from p in _context.Products
                    select p;
        return query;
    }
}
В настоящее время я собираюсь сделать несколько вещей:
- Контекст Mocking EF с чем-то вроде этого approach- Mocking EF при модульном тестировании или непосредственно с использованием среды моделирования на интерфейсе, таком как moq - с болью от того, что модульные тесты могут проходить, но не обязательно работать из конца в конец и подкрепить их интеграционными тестами?
- Может быть, использовать что-то вроде Effort, чтобы издеваться над EF - я никогда не использовал его и не уверен, что кто-то еще использует его в дикой природе?
- Не беспокоиться о тестировании чего-либо, что просто вызывает EF - так что, по сути, сервисные методы, которые вызывают EF напрямую (getAll и т.д.), Не тестируются модульно, а просто тестируются на интеграцию?
Кто-нибудь на самом деле делает это без репо и имеет успех?
