隨着JustMock我可以模擬的DataContext表與Linq中的列表,輕鬆這樣的SQL,其中一個IEnumerable正在各的DataContext的表的地方通過ReturnsCollection()讓我在假數據插入:FakeItEasy中JustMock的ReturnsCollection()的等價物?
[TestMethod]
public void ShouldGetManagersByHireDate()
{
var context = Mock.Create<MyDataContext>();
Mock.Arrange(()=> context.Employees).ReturnsCollection(GetFakeEmployees());
Mock.Arrange(() => context.Managers).ReturnsCollection(GetFakeManagers());
var repository = new EmployeeRepository(context);
var managers = repository.GetManagersByHireDate(new DateTime(2002, 1, 1), DateTime.Now);
Assert.AreEqual(1, managers.Count());
Assert.AreEqual(1, managers.FirstOrDefault().ID);
}
private IEnumerable<Employee> GetFakeEmployees()
{
return new List<Employee> {
new Employee { ID = 1, HireDate = new DateTime(2004, 12, 1) },
new Employee { ID = 2, HireDate = new DateTime(2006, 7, 1) },
new Employee { ID = 3, HireDate = new DateTime(2009, 3, 1) }
};
}
private IEnumerable<Manager> GetFakeManagers()
{
return new List<Manager> {
new Manager { ID = 1 }
};
}
而且這將是測試方法:
public IQueryable<Employee> GetManagersByHireDate(DateTime start, DateTime end)
{
return from e in context.Employees
join m in context.Managers on e.ID equals m.ID
where e.HireDate >= start && e.HireDate <= end
select e;
}
我尋找執行相同的魔術讓我代替Table<T>
使用IEnumerable<T>
測試LINQ的宗旨,以SQL,最好在FakeItEasy的某種方式。
我沒有在你的例子中的任何地方看到'表'? –
2013-02-21 12:07:43
@AdamRalph JustMock的ReturnsCollection允許您爲給定的linq查詢http://goo.gl/VBuPP返回一個可枚舉值。在這種情況下,測試人員不需要返回表中的排列方法http://goo.gl/45HC7 –
cecilphillip
2013-02-21 19:52:59
此外,FakeItEasy使用Castle的DynamicProxy,它不能攔截非虛擬方法 – cecilphillip 2013-02-22 20:26:56