unit testing - Equivalent of JustMock's ReturnsCollection() in FakeItEasy? -



unit testing - Equivalent of JustMock's ReturnsCollection() in FakeItEasy? -

with justmock can mock datacontext tables lists in linq sql this, ienumerable taking place of each datacontext's table through returnscollection() allowing me plug in false data:

[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() { homecoming 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() { homecoming new list<manager> { new manager { id = 1 } }; }

and method under test:

public iqueryable<employee> getmanagersbyhiredate(datetime start, datetime end) { homecoming e in context.employees bring together m in context.managers on e.id equals m.id e.hiredate >= start && e.hiredate <= end select e; }

i looking way of performing same magic allowing me utilize ienumerable<t> in place of table<t> purpose of testing linq sql, preferably in fakeiteasy.

linq sql isn't easiest thing test using open source tools. hopefully, approach may work you.

fakeiteasy doesn't have method justmock's returncollection allow mock out itable homecoming ienumerable. 1 alternative have create mockabletable similar 1 shown here. populate table, have like

private itable<employee> getfakeemployees() { list<employee> sampledata = /* fill employees */ var employeetable = new mockabletable<employee>(null, sampledata.asquerable()); homecoming employeetable; }

also, fakeiteasy won't intercept employees property on datacontext since it's non virtual property on concrete class. create simple custom base of operations class , have mydatacontext class derive straight that.

public abstract class customdatacontext : datacontext, icustomdatacontext { } public interface icustomdatacontext { itable<employee> { get; } }

the main point here leverage interface mock. in test method, have:

[testmethod] public void shouldgetmanagersbyhiredate() { var context = a.fake<icustomdatacontext>(); a.callto(()=> context.employees).returns(getfakeemployees()); 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); }

i haven't compiled this, concept should stable. relying on abstractions create code more testable , easier mock.

hope helps somewhat.

unit-testing linq-to-sql fakeiteasy justmock

Comments

Popular posts from this blog

web services - java.lang.NoClassDefFoundError: Could not initialize class net.sf.cglib.proxy.Enhancer -

Accessing MATLAB's unicode strings from C -

javascript - mongodb won't find my schema method in nested container -