How do I mock the method GetValues() in System.Data.IDataReader?
This method changes the array of objects passed to it, so it can’t simply return a mocked value.
private void UpdateItemPropertyValuesFromReader( object item, IDataReader reader )
{
object[] fields = new object[ reader.FieldCount ];
reader.GetValues( fields ); //this needs to be mocked to return a fixed set of fields
// process fields
...
}
you need to use the method Expect.Do() which takes a delegate. this delegate then needs to 'do' something, in place of the calling code. Therefore, write a delegate that populates the fields variable for you.
private int SetupFields( object[] fields )
{
fields[ 0 ] = 100;
fields[ 1 ] = "Hello";
return 2;
}
[Test]
public void TestGetValues()
{
MockRepository mocks = new MockRepository();
using ( mocks.Record() )
{
Expect
.Call( reader.GetValues( null ) )
.IgnoreArguments()
.Do( new Func<object[], int>( SetupField ) )
}
// verify here
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With