2010-03-03 8 views
9

Ich versuche, Mock zu verwenden, um zu überprüfen, dass eine Indexeigenschaft festgelegt worden ist. Hier ist ein moq-able Objekt mit einem Index:Wie Moq Einstellung einer indizierten Eigenschaft

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

Zuerst versuchte Setup() mit:

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

..., die nicht - es muss gegen get{}

werden Verifizieren So habe ich versucht, mit SetupSet():

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

..., die eine runtim gibt e Ausnahme:

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) 

Was ist der richtige Weg, dies zu erreichen?

+0

Warum sollten Sie in diesem Fall spotten? Was versuchst du zu testen? Warum nicht die Indexklasse direkt testen? –

+0

Es ist eine Schnittstelle mit einer Indexeigenschaft, über die ich wirklich spotten möchte. Ich bat darum, ein konkretes Objekt mit einer virtuellen Eigenschaft zu verwenden, um die Frage zu vereinfachen. –

+0

Ok. Macht mehr Sinn :-) –

Antwort

8

sollten Diese

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

Sie können es einfach behandeln.

+0

Super, danke. –

+1

Es wäre eine noch bessere Antwort (ohne es zu dissen), wenn es dafür sorgen würde, dass die verspottete Klasse keinen Setter für das Indexeigentum hat (wie es bei mir der Fall ist). – PandaWood

Verwandte Themen