web-dev-qa-db-ja.com

Moq:セッターなしでプロパティを設定しますか?

私は次のクラスを持っています:

public class PairOfDice
{
    private Dice d1,d2;
    public int Value 
    {
       get { return d1.Value + d2.Value; }
    }
}

ここで、テストでPairOfDiceを使用して、値1を返しますが、実際のサイコロではランダムな値を使用します。

[Test]
public void DoOneStep ()
{
    var mock = new Mock<PairOfDice>();
    mock.Setup(x => x.Value).Return(2);
    PairOfDice d = mock.Object;
    Assert.AreEqual(1, d.Value);
}

残念ながら私はInvalid setup on non-overridable memberエラー。この状況で私は何ができますか?

ユニットテストを実装するのはこれが初めてであることに注意してください。

19
Sven

モックオブジェクトで.SetupGetを使用できます。

例えば。

[Test]
public void DoOneStep ()
{
    var mock = new Mock<PairOfDice>();
    mock.SetupGet(x => x.Value).Returns(1);
    PairOfDice d = mock.Object;
    Assert.AreEqual(1, d.Value);
}

詳細については、 ここ を参照してください。

47
Jim Johnson

あなたの問題はそれがvirtualではないからです。セッターがいないからではありません。

Moqはプロパティを上書きできないため、プロキシを構築できません。インターフェイス、仮想メソッド、または抽象メソッドのいずれかを使用する必要があります。

15
Aren