我觉得我用这个程序打了一个砖墙。这是我第一次尝试对单元进行单元测试,而我是该团队的试验品。我的问题围绕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 :(得分:0)
看看FluentAssertions collection testing methods。这些使测试集合更容易。
BTW mockBills
并非嘲笑,它是您正在测试的真实内容,所以我们通常不会这样命名。