Поведенческое тестирование с Moq: как установить ожидания для не виртуального свойства - PullRequest
0 голосов
/ 07 марта 2011

Я новичок в Moq, и мне интересно, как я мог бы написать следующий тест, если свойство "Bounds" не объявлено виртуальным.

[TestMethod]
public void SettingSize_Sets_Bounds_ExactlyOnce()
{
    // given
    var mock = new Mock<Visual>();
    var anonymSize = DrawingHelper.AnonymousSize();
    // when 
    mock.Object.Size = anonymSize;
    // then
    mock.VerifySet(visual => visual.Bounds = new Rectangle(DrawingHelper.Origin(),anonymSize), Times.Once());
}

Чтобы обеспечить небольшой контекст, класс Visual реализует интерфейс IVIsual, в котором объявлено свойство Bounds.Поэтому я мог бы использовать интерфейс для создания объекта Mock, но я не понимаю, как мне следует изменить приведенный выше тест, чтобы все еще тестировать поведение конкретного реализатора IVisual (класс Visual).хотите убедиться, что когда установлено свойство Size, то также устанавливается не виртуальное свойство Bounds.

Возможно ли это с Moq?Если нет, то каковы рамки, которые позволили бы это?

1 Ответ

1 голос
/ 07 марта 2011

Ваш when неверен.

mock.Object.Size = anonymSize;

Вы тестируете макет : вы присваиваете значение свойству фиктивного объекта, в то время как вам нужно протестировать реальный объект. Укажите больше информации о реальном объекте, который вы пытаетесь проверить.


UPDATE

Вам не нужен макет, вы тестируете класс во время насмешек над зависимостями. У вас здесь нет никакой зависимости.

Итак, что бы я сделал:

// Given
Visual v = new Visual();

// When
v.Size = someSize;

// Then
Assert.That(v.Bounds == someExpectedBounds);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...