如何在System.Data.IDataReader中模拟GetValues()方法?

时间:2008-11-27 22:13:00

标签: 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
   ...
}

1 个答案:

答案 0 :(得分:9)

你需要使用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
}