Метод модульного тестирования с Dapper.Contrib Вставить метод расширения

Я пытаюсь написать модульный тест для хранилища, используя Dapper.Contrib.Extensions (в частности, метод расширения Вставка (объект)). Так как это статический метод, мы не можем перехватить вывод с помощью ложного IDbConnection. В Интернете я нашел информацию, которая рекомендовала использовать InMemoryDatabase с ServiceStack.OrmLite.Sqlite. Вот код, который у меня есть для этого:

    public class InMemoryDatabase
    {
        private readonly OrmLiteConnectionFactory _dbFactory = 
           new OrmLiteConnectionFactory(":memory:", SqliteOrmLiteDialectProvider.Instance);

        public IDbConnection OpenConnection() => _dbFactory.OpenDbConnection();

        public void Insert<T>(IEnumerable<T> items)
        {
            using (var db = OpenConnection())
            {
                db.CreateTableIfNotExists<T>();
                foreach (var item in items)
                {
                    db.Insert(item);
                }
            }
        }
    }

У меня простой старый класс POCO без аннотаций данных. Когда я тестирую метод с помощью вызова метода расширения из Dapper и базы данных In-Memory, я получаю следующую ошибку:

Исключение типа "System.Data.SQLite.SQLiteException" произошло в Dapper.dll, но не было обработано в коде пользователя

Дополнительная информация: ошибка логики SQL или отсутствующая база данных

нет такой функции: SCOPE_IDENTITY

Я знаю, что ошибка связана с тем, что Dapper и Sql Server используют функцию, недоступную в Sql Lite. Что я хотел бы знать, так это способ обойти это ради модульного тестирования метода с помощью вызова метода расширения. Я не женат на ServiceStack.OrmLite, если кто-то нашел другой путь.

0 ответов

Другие вопросы по тегам