有没有办法模拟BeginTransaction for Unit测试

问题描述 投票:0回答:1

我已经在我的数据库中模拟了一些表,我也使用了begin transaction,如何在我的代码中模拟Begin Transaction?

我在API中使用了begin transaction,但我没有得到任何想法如何在这里为我的代码实现模拟:我为测试用例编写的代码:

[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 ="[email protected]",
            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);
}

任何人都可以帮助我,如何在上面的案例中模拟交易

c# asp.net-core
1个回答
0
投票

您可以使用System.Transactions.TransactionScope而不是begin transaction

using System.Transactions;

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

  transactionScope.Complete();
}

你不需要嘲笑System.Transactions.TransactionScope你的单元测试将没有任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.