0
我覺得我用這個程序碰到了一堵磚牆。這是我第一次嘗試單元測試,我是團隊的試驗室。我的問題圍繞使用調用多個實體的Linq查詢的單元測試方法展開。我想我已經想出瞭如何使用單個實體單元測試查詢,但尚未得到多個。具有複雜Linq查詢的單元測試方法
示例代碼:
[TestMethod]
public void BillsTest_GetOutStandingBills_DataIntegrity()
{
//Arrange
var data = new MockData();
var billCache = data.MockBillCache();
//var mockSet = new Mock<DbSet<BillCache>>();
//mockSet.As<IQueryable<BillCache>>().Setup(m => m.Provider).Returns(dataBillCache.Provider);
//mockSet.As<IQueryable<BillCache>>().Setup(m => m.Expression).Returns(dataBillCache.Expression);
//mockSet.As<IQueryable<BillCache>>().Setup(m => m.ElementType).Returns(dataBillCache.ElementType);
//mockSet.As<IQueryable<BillCache>>().Setup(m => m.GetEnumerator()).Returns(dataBillCache.GetEnumerator());
var mockSet = EntityFrameworkMoqHelper.CreateMockForDbSet<BillCache>()
.SetupForQueryOn(billCache);
//var mockContext = new Mock<BillPayContext>();
//mockContext.Setup(m => m.BillCaches).Returns(mockSet.Object);
var mockContext = EntityFrameworkMoqHelper.CreateMockForDbContext<BillPayContext, BillCache>(mockSet);
string SSN = "556-53-08";
var DOB = DateTime.Parse("11/02/1961");
int MN = 43760148;
var mockBills = new Bills(mockContext.Object);
//Act
var result = mockBills.GetOutStandingBills(SSN, DOB, MN);
var confirm = result.ToList();
//Assert
Assert.AreEqual(2, confirm.Count);
}
方法進行測試:
public IEnumerable<BillCache> GetOutStandingBills(string SSN, DateTime DOB, int MN)
{
// Returns bills for the authenicated user by SSN and DOB or MRN and DOB
IEnumerable<BillCache> outStandingBillsResult = null;
if (!string.IsNullOrEmpty(SSN) && DOB > new DateTime(1753, 1, 1))
{
outStandingBillsResult = CoreBillQuery()
.Where(w => w.SSN == SSN && w.DateOfBirth == DOB ||
(w.AccountID == MRN && w.BillingSystemID == 9 && w.DateOfBirth == DOB));
}
return outStandingBillsResult;
}
謝謝,我會看看它。我使用該命名約定來簡單地顯示該類具有假上下文。我確實看到了你的觀點,儘管它可能讓我背後的人感到困惑。 – user6185909