D3v*_*r0n 5 c# unit-testing rhino-mocks datareader
如何在System.Data.IDataReader中模拟GetValues()方法?
此方法更改传递给它的对象数组,因此它不能简单地返回模拟值.
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
...
}
Run Code Online (Sandbox Code Playgroud)
你需要使用Expect.Do()方法来获取委托.然后,这个委托需要"做"某事,代替调用代码.因此,编写一个为您填充fields变量的委托.
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
}
Run Code Online (Sandbox Code Playgroud)