Есть ли способ издеваться над BeginTransaction для юнит-тестирования - PullRequest
0 голосов
/ 30 апреля 2019

Я смоделировал некоторые таблицы в своей базе данных, и я также использовал транзакцию начала, как смоделировать транзакцию начала в моем коде?

Я использовал транзакцию начала в API, и я не получилЛюбая идея, как реализовать макетирование для этой транзакции, здесь код, который я написал для тестового примера:

[Fact]
public void InsertPeople_OkResult()
{
    //ILoggerMocking
    var serviceProvider = new ServiceCollection()
    .AddLogging()
    .BuildServiceProvider();

    var factory = serviceProvider.GetService<ILoggerFactory>();

    var logger = factory.CreateLogger<CreateProfileAPIController>();

    //IConfigurationMock
    var datasourcemck = new Mock<IConfigurationSection>();
    datasourcemck.Setup(x => x.Value).Returns("3");

    var entmk = new Mock<IConfigurationSection>();
    entmk.Setup(x => x.Value).Returns("2000");

    var confg = new Mock<IConfigurationRoot>();
    confg.Setup(s => s.GetSection("DataSourceId")).Returns(datasourcemck.Object);
    confg.Setup(s => s.GetSection("EntityId")).Returns(entmk.Object);

    //Act
    peopleRepository = new PeopleRepository(createProfileTestCasesPreparations.mockContext.Object, confg.Object, logger);
    //Arrange
    var data = new SunBook.Models.ViewModel.PersonalDetailsModel()
    {
        People = new SunBook.Models.People()
        {
            FirstName = "Pj",
            LastName = "ff",
            Gender = "male",
            LastChangedOn = DateTime.Now,
            Suffix = "sr",
            PeopleTagId = 2


        },
        EntityPeople = new SunBook.Models.EntityPeople()
        {
            Title = "dev",
            Department = "labs",
            LastChangedOn = DateTime.Now,
            DataSourceId = 3,
            FromDate = DateTime.Now

        },
        PeopleTagId = 2,
        TagId = 1


    };
    peopleRepository.AddPersonalDetails(data);
    var cont = new ContactDetailsModel()
    {

        PeopleAddress = new List<SunBook.Models.PeopleAddress>()
    {
        new SunBook.Models.PeopleAddress()
        {
            PersonId =data.People.PersonId,
            Address1 ="Vzag",
            Address2 ="MVP",
            AddressTypeId =1,
            City ="Vizag",
            Country ="Ind",
            LastChangedOn =DateTime.Now,
            DataSourceId =3,
            ZipCode ="53545",
            State ="ME"
        }
    },
        PeopleEmail = new List<SunBook.Models.PeopleEmail>()
    {
        new SunBook.Models.PeopleEmail()
        {
            EmailAddress ="abc@gmail.com",
            DataSourceId =3,
            EmailTypeId =1,
            LastChangedOn =DateTime.Now,
            PersonId =data.People.PersonId,
            IsPrimary =true
        }
    },
        PeoplePhones = new List<SunBook.Models.PeoplePhone>()
    {
        new SunBook.Models.PeoplePhone()
        {
            PersonId =data.People.PersonId,
            PhoneNumber ="985646684",
            DataSourceId =3,
            LastChangedOn =DateTime.Now,
            PhoneTypeId =1,
            IsPrimary =true
        }
    },
        PersonId = data.People.PersonId,
        PeopleTagId = 2

    };
    peopleRepository.AddContactDetails(cont);

    //Assert
    Assert.NotEqual<int>(0, data.People.PersonId);
}

Может ли кто-нибудь мне помочь, как смоделировать транзакцию в приведенном выше случае

1 Ответ

0 голосов
/ 30 апреля 2019

Вы можете использовать System.Transactions.TransactionScope вместо начала транзакции

using System.Transactions;

using (var transactionScope = new TransactionScope())
{
  // your db operations ...

  transactionScope.Complete();
}

Вам не нужно издеваться System.Transactions.TransactionScope ваши юнит-тесты будут работать без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...