Как получить значения версии строки из базы данных SQLite в памяти

В настоящее время я реализую сбор / фикстуру базы данных для своих модульных тестов, как описано здесь по этому вопросу:

xUnit.net - запускать код один раз до и после ВСЕХ тестов

Однако вместо использования базы данных InMemory я использую SQLite, поскольку в настоящее время InMemory имеет ошибку в .Net Core 2.1, которая не выполняет проверку последовательности при использовании типа байтового массива

Это приводит меня к моему текущему затруднительному положению, а именно к тому, что массив байтов, когда вы настраиваете фикстуру базы данных, не проходит через модульный тест, когда контекст извлекается из фикстуры базы данных в модульный тест, что вызывает ошибки параллелизма. когда пытаюсь запустить тесты.

В качестве примера:

Сначала установите класс DatabaseFixture следующим образом:

public class DatabaseFixture : IDisposable
{
    public DatabaseFixture()
    {
        var connectionStringbuilder = new SqliteConnectionStringBuilder{DataSource = ":memory:", Cache = SqliteCacheMode.Shared};
        var connection = new SqliteConnection(connectionStringbuilder.ToString());

        options = new DbContextOptionsBuilder<CRMContext>()
            .UseSqlite(connection)
            .EnableSensitiveDataLogging()
            .Options;

        using (var context = new CRMContext(options))
        {
            context.Database.OpenConnection();
            context.Database.EnsureCreated();                              
            context.Persons.AddRange(persons);
            context.SaveChanges();
        } 


    }
    public DbContextOptions<CRMContext> options { get; set; }

    public void Dispose()
    {
        using (var context = new CRMContext(options))
        {
            context.Database.CloseConnection();

            context.Dispose();
        }
    }
    private IQueryable<Person> persons = new List<Person>()
        {
            new Person
            {
                Id = 1, 
                Forename = "Test",
                Surname = "User",
                RowVersion = new byte[0]
            },
            new Person
            {
                Id = 2, 
                Forename = "Another",
                Surname = "Test",
                RowVersion = new byte[0]
            }
        }.AsQueryable();
}

Настройте пустой класс DatabaseCollection в соответствии с первая ссылка:

 [CollectionDefinition("Database collection")]
public class DatabaseCollection : ICollectionFixture<DatabaseFixture>
{
}

Затем настройте свой модульный тест, чтобы использовать этот компонент базы данных:

[Collection("Database collection")]
 public class PersonTests : BaseTests
{
    private readonly DatabaseFixture _fixture;

    public PersonTests(DatabaseFixture fixture)
    {
        _fixture = fixture;
    }
    [Fact]
    public void SaveAndReturnEntityAsync_SaveNewPerson_ReturnsTrue()
    {
            {

        using (var context = new Context(_fixture.options))
        {
            var existingperson = new Person
            {
                Id = 2,
                Forename = "Edit",
                Surname = "Test",
                RowVersion = new byte[0]
            };
            var mapperConfig = new MapperConfiguration(cfg => { cfg.AddProfile(new InitializeAutomapperProfile()); });

            var AlertAcknowledgeService = GenerateService(context);

            //Act
            //var result = _Person.SaveAndReturnEntityAsync(mappedPersonAlertAcknowledge);
            //Assert
            Assert.Equal("RanToCompletion", result.Status.ToString());
            Assert.True(result.IsCompletedSuccessfully);
            Assert.Equal("The data is saved successfully", result.Result.SuccessMessage);
        }
    }

Теперь, когда я отлаживаю это, он правильно попадает в прибор, и вы можете, когда вы расширяете представление результатов, переменная RowVersion назначается правильно:

Как получить значения версии строки из базы данных SQLite в памяти

Однако, когда данные передаются в модульный тест, версия строки получает значение null:

Как получить значения версии строки из базы данных SQLite в памяти

Любая помощь по этому вопросу будет принята с благодарностью!

Похоже, у вас может быть состояние гонки, поскольку вы вызываете асинхронный метод, не ожидая его, а затем утверждаете, что результат задачи завершен сразу после этого. (Не уверен, что это часть вашей проблемы). Я рекомендую сделать тест асинхронным и дождаться вызова результата.

Kieran Devlin 11.02.2021 09:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
315
0

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