2016-05-09 52 views
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;    
    } 

回答

0

看一看FluentAssertions collection testing methods。這些使測試集合更容易。

BTW mockBills不是一個模擬,它是你正在測試的真實的東西,所以我們通常不會這樣命名。

+0

謝謝,我會看看它。我使用該命名約定來簡單地顯示該類具有假上下文。我確實看到了你的觀點,儘管它可能讓我背後的人感到困惑。 – user6185909