Как выяснить, чего не хватает в Moq? - PullRequest
0 голосов
/ 25 июня 2018

Я получаю сообщение об ошибке в Moq

Message: Test method [...] threw exception: 
Moq.MockException: IVeracrossAPI.Authorization = Basic Og== invocation failed with mock behavior Strict.
All invocations on the mock must have a corresponding setup.

Кажется очевидным.К сожалению, в моем коде у меня уже есть это:

var VeracrossMock = new Mock<IVeracrossAPI>(MockBehavior.Strict);

var byteArray = Encoding.ASCII.GetBytes("username:password1234");
VeracrossMock.Setup(a => a.Authorization).Returns(new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)));

Так что теперь я не уверен, как отсутствует IVeracrossAPI.Authorization.Какой подход, чтобы выяснить, что на самом деле происходит

1 Ответ

0 голосов
/ 25 июня 2018

При использовании MockBehavior.Strict это означает, что для макета любой вызываемый член должен иметь соответствующий Setup, иначе он выдаст исключение.

Когда вы используете MockBehavior.Loose, который также является значением по умолчанию, то при вызове участника, который не был настроен, он просто возвращает тип результата по умолчанию для члена.

Показанная текущая настройка будет работать для получения значения из свойства.

Из этого исключения выясняется, что тест пытается установить значение, которое не было установлено. Помните, что свойства - это два метода в одном (get_Property и set_Property).

Предложить заглушить свойство, чтобы оно отслеживало присвоенные значения.

// start "tracking" sets/gets to this property
VeracrossMock.SetupProperty(_ => _.Authorization);

var byteArray = Encoding.ASCII.GetBytes("username:password1234");
var authorization = new AuthenticationHeaderValue("Basic",  Convert.ToBase64String(byteArray));
//set value
VeracrossMock.Object.Authorization = authorization;

Ссылка Быстрый запуск Moq: Свойства

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