Как мы можем протестировать хранимую процедуру из базы данных с помощью объектов moq в C#?
У меня есть два ИП в базе данных. Я протестировал два sp с помощью модульного теста MS. При развертывании я столкнулся с проблемой. Я не мог получить доступ к базе данных на сервере приложений. Вот почему я придумал фреймворк moq. Мне нужно протестировать эти два sp, используя объекты moq вместо реальных вызовов базы данных. Не могли бы вы посоветовать мне, есть ли какой-нибудь лучший способ сделать это?
Что я уже пробовал:
Я уже пробовал это сделать. Просто я создал один интерфейс(moq repository) и добавил два метода.
public interface IImintMSNRepository { bool InsertBulkImportPortfolios(DataTable mSNBulkImportPortfolioTVP,string updatedBy); bool InsertBulkImportIndexes(DataTable mSNBulkImportIndexTVP, string updatedBy); }
Я протестировал эти два метода, используя moq, как показано ниже.
public readonly IImintMSNRepository MockMSNRepository; public ImintMSNUnitTests() { Mock<IImintMSNRepository> mockRepo = new Mock<IImintMSNRepository>(); mockRepo.Setup(a => a.InsertBulkImportPortfolios(It.IsAny<DataTable>(), It.IsAny<string>())).Returns(true); mockRepo.Setup(b => b.InsertBulkImportIndexes(It.IsAny<DataTable>(), It.IsAny<string>())).Returns(true); this.MockMSNRepository = mockRepo.Object; } [TestMethod] public void TestPortfolioSPByMOQ() { MSNBulkImportPortfolioTVP ptvp = new MSNBulkImportPortfolioTVP(); DataRow tvprow = ptvp.NewRow(); tvprow["PortfolioCode"] = "AutomationMoq1"; tvprow["PortfolioName"] = "AutomationMoqName1"; tvprow["ClientName"] = "Thomson Reuters"; tvprow["RIC"] = "IBM.N"; tvprow["CalculationMethodology"] = "TRGE"; tvprow["CalendarEventCode"] = "US"; tvprow["IsProformaPortfolio"] = 1; tvprow["IsParentPortfolio"] = 1; tvprow["IsGenerateGroupFragment"] = 1; tvprow["IsPushLastTick"] = 1; ptvp.Rows.Add(tvprow); bool expected = true; bool actual; actual = this.MockMSNRepository.InsertBulkImportPortfolios(ptvp, "MSNMoqUnitTestProcess"); Assert.AreEqual(expected, actual); }