2010-03-03 6 views
9

Sto tentando di utilizzare la simulazione per verificare che sia stata impostata una proprietà dell'indice. Ecco un oggetto moq-in grado con un indice:Come eseguire l'impostazione di una proprietà indicizzata

public class Index 
{ 
    IDictionary<object ,object> _backingField 
     = new Dictionary<object, object>(); 

    public virtual object this[object key] 
    { 
     get { return _backingField[key]; } 
     set { _backingField[key] = value; } 
    } 
} 

In primo luogo, provato ad utilizzare Setup():

[Test] 
public void MoqUsingSetup() 
{ 
    //arrange 
    var index = new Mock<Index>(); 
    index.Setup(o => o["Key"]).Verifiable(); 
    // act 
    index.Object["Key"] = "Value"; 
    //assert 
    index.Verify(); 
} 

... che non riesce - deve essere verificato rispetto get{}

Così, ho provato utilizzando SetupSet():

[Test] 
public void MoqUsingSetupSet() 
{ 
    //arrange 
    var index = new Mock<Index>(); 
    index.SetupSet(o => o["Key"]).Verifiable(); 
} 

... che dà un runtim e eccezione:

System.ArgumentException : Expression is not a property access: o => o["Key"] 
at Moq.ExpressionExtensions.ToPropertyInfo(LambdaExpression expression) 
at Moq.Mock.SetupSet(Mock mock, Expression`1 expression) 
at Moq.MockExtensions.SetupSet(Mock`1 mock, Expression`1 expression) 

Qual è il modo corretto per realizzare questo?

+0

Perché dovresti voler usare il mocking in questo caso? Che cosa stai provando a testare? Perché non testare direttamente la classe Index? –

+0

È un'interfaccia con una proprietà dell'indice che sto davvero volendo prendere in giro. Ho chiesto di utilizzare un oggetto concreto con una proprietà virtuale per semplificare la domanda. –

+0

Ok. Ha più senso :-) –

risposta

8

Questo dovrebbe funzionare

[Test] 
public void MoqUsingSetup() 
{ 
    //arrange 
    var index = new Mock(); 
    index.SetupSet(o => o["Key"] = "Value").Verifiable(); 
    // act 
    index.Object["Key"] = "Value"; 
    //assert 
    index.Verify(); 
}

Si può solo trattarla come un normale setter di proprietà.

+0

Fantastico, grazie. –

+1

Sarebbe una risposta ancora migliore (non dissing) se pensava che la classe derisa non avesse un setter per la proprietà dell'indice (come per me) – PandaWood

Problemi correlati