Moq: Установить свойство без установщика? - PullRequest
15 голосов
/ 28 октября 2010

У меня есть следующий класс:

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. Что я могу сделать в этой ситуации?

Обратите внимание, что это моя первая попытка внедрения юнит-тестов.

Ответы [ 2 ]

46 голосов
/ 12 января 2011

Вы можете использовать .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);
}

Подробнее см. здесь .

14 голосов
/ 28 октября 2010

Ваша проблема в том, что это не virtual. Не потому, что у тебя нет сеттера.

Moq не может создать прокси, потому что он не может переопределить вашу собственность. Вам либо нужно использовать интерфейс, виртуальный метод или абстрактный метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...