我已经在我的数据库中模拟了一些表,我也使用了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);
}
任何人都可以帮助我,如何在上面的案例中模拟交易
您可以使用System.Transactions.TransactionScope
而不是begin transaction
using System.Transactions;
using (var transactionScope = new TransactionScope())
{
// your db operations ...
transactionScope.Complete();
}
你不需要嘲笑System.Transactions.TransactionScope
你的单元测试将没有任何问题。