【发布时间】:2019-02-11 17:58:34
【问题描述】:
我在数据库中有两个 sp。我使用 MS 单元测试(实际数据库调用)测试了两个存储过程。在部署中,我遇到了一个问题。我无法访问应用程序服务器中的数据库。这就是我提出最小起订量框架的原因。我需要使用 moq 对象而不是实际的数据库调用来测试这两个存储过程。你能建议我有什么更好的方法吗?除了像 NUnit Test 这样的 MS 单元测试?
我尝试过的:
我已经试过了。只是我创建了一个接口(moq 存储库)并添加了两种方法。
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);
}
谁能帮帮我?
【问题讨论】:
-
您是否要测试存储过程?或者您是否正在尝试测试调用存储过程的存储库方法?您需要清楚地识别“被测系统”。
标签: c# asp.net sql-server unit-testing moq