Разница между SetupSet и SetupProperty в Moq - PullRequest
11 голосов
/ 09 ноября 2010

Я понимаю, что SetupSet - это старый способ настройки свойств в Moq. Сейчас это обсолета, но мой intellisense показывает оба, ни один из них не помечен как Обсолетта. Кто-нибудь может указать мне фактическую разницу между ними?

Ответы [ 2 ]

18 голосов
/ 09 ноября 2010

Я, вероятно, нашел одно из различий в следующем.

Если вы пытаетесь смоделировать свойство Readonly, вы должны использовать SetupGet, так как в этом случае SetupProperty не работает. Принимая во внимание, что SetupProperty может использоваться для не только для чтения свойств, если вы хотите установить ожидание.

Например, ниже не будет работать

public interface IXyz
{
  int Id { get; }
}

//Test Side Code    
var _mock = new Mock<IXyz>();
_mock.SetupProperty(x => x.Id, 1054);

Если вы попытаетесь выполнить приведенный выше код, он появится с сообщением System.ArgumentException: свойство IXyz.Id доступно только для чтения

Так что, если вы измените код ниже, он будет работать

_mock.SetupGet(x => x.Id).Returns(1054);
13 голосов
/ 09 ноября 2010

SetupSet не помечен как устаревший. Возможно, вы думаете о ExpectSet , который помечен как устаревший сообщением «ExpectSet был переименован в SetupSet.»

SetupSet позволяет указать ожидание того, что свойство будет установлено:

mock.SetupSet(x => x.Prop = "bar").Verifiable();
mock.Object.Prop = "foo";
mock.Verify();   // fails

SetupProperty выглядит как способ заглушить свойство на макете (см. Тот же раздел документации, что и для SetupSet).

...