Question

I'm having a strange experience with moq/mocking.

Im trying to mock the data going into a method so that i dont have to have adatabase available at test time.

So im loading in some data ive previously seralised. Loading it into a dataTable, then creating a data reader from there, because my business layer method expects a data reader.

Then creating a mock for my data layer. and setting the return value for a particular method to my new datareader.

I am then setting (injecting) my mock data layer into my business layer so it can do the work of returning the data when the time comes..

var dataTable = DataSerialisation.GetDataTable("C:\\data.xml");
IDataReader reader = dataTable.CreateDataReader();

var mock = new Mock<IRetailerDal>();
mock.Setup(x => x.ReadRetailerDetails("00")).Returns(reader);

retailersBusinessLayer.RetailerDal = mock.Object;

var r = retailersBusinessLayer.GetRetailerDetail("00");

Now.. when the "GetRetailerDetail" is called is basically gets to "while(data.Read())" and crashes out but only sometimes. I get the exception:

System.InvalidOperationException : DataTableReader is invalid for current DataTable 'Table1'.

Othertimes it move past that and can read some columns data, but other columns dont exist. (which must be to do with my serialisation method)

Was it helpful?

Solution

Well, this isnt exactly a satisfactory answer, but the code works now..

its similar to this.. in that no reason was found. here

Anyway... as stated above the issue was ocuring inside my GetRetailerDetail method, where the code hits while(data.Read()) it throws the error..

The fix.. change the name of the data reader variable.. i.e. its was "data" and its now "data2".. thats all i changed.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top