2008-11-27 4 views
5

Wie spotze ich die Methode GetValues ​​() in System.Data.IDataReader?Wie spotze ich die Methode GetValues ​​() in System.Data.IDataReader?

Diese Methode ändert das Array von Objekten, die an sie übergeben werden, sodass nicht einfach ein verspotter Wert zurückgegeben werden kann.

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 
    ... 
} 

Antwort

9

Sie müssen die Methode Expect.Do() verwenden, die einen Delegaten nimmt. Dieser Delegat muss dann anstelle des aufrufenden Codes etwas "tun". Schreiben Sie daher einen Delegaten, der die Feldervariable für Sie auffüllt.

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 
} 
+1

Ich bemerke deinen kleinen Tippfehler, aber ich glaube, das ist was ich brauche! Vielen Dank – D3vtr0n

+0

Ich kann nicht ein

+0

@Ben Ahh musst du Firewalls lieben. –

Verwandte Themen